How can one find his path in software development considering the vast number of programming languages, frameworks, tools etc. that exist?
-
The common wisdom says (at least for beginners) that one should know a programming language/domain really well and obviously it makes sense to master a language/domain that you like but how can one do that considering that each language basically is a universe of information? Each language has a dozen frameworks, tools, tricks, legacy issues, compatibility issues, etc. And there are a lot of languages out there! Each domain contains tons of information that you must absorb in order to become proficient in it or to at least have all the resources needed to formulate a solid opinion about it. How did you know or reach the conclusion that you want to become an expert in C++? Have you tried all the other languages out there? If so, how did you do it considering it takes years in order to be able to formulate a solid opinion about it. Am I naive? Can you tell if a programming language is not for you just by learning its syntax and building a small project with it? How did you know or reach the conclusion that you want to work in Big Data? Have you tried all the other fields? For me it seems statistically impossible to find out where you should be headed as a software developer. If we consider the fact that one can have a job + school + other responsibilities, the time left for exploring all these possibilities is even shorter. And if you don't try them out, how can you know that you like them or not?
-
Answer:
That common wisdom is, as ever, far more common than wise¹. I think it makes more sense to start by learning about many different platforms. It's important to have a broad view of programming from the get-go instead of focusing on the first thing you happen upon. Don't worry about mastering anything quite yet: just get a good feel for different things. This will ensure that you don't get stuck in one way of thinking. For example, it's certainly important to get a good low-level understanding of modern CPUs by learning something like C. But it's too easy to get stuck with the low-level mindset and not take advantage of powerful abstractions if all you know is C! This goes in the opposite way too: it's much easier to optimize even high-level languages like Java and Haskell if you have an understanding of memory layout, pointers and so on. Once you have a basic understanding of many different platforms, you can make an informed choice about which one to specialize in. This way you can work on what you find the most interesting with the technology you like the most. Making an informed choice is much better than doubling-down on whatever you choose first, purely by chance. This will make you a better, more flexible programmer. But, more importantly, it will make you a happier programmer because you can focus on what you like. And the only way to figure out what you really like is to taste a bunch of different things. Footnotes ¹ I've found that quite often "common wisdom" and "common sense" are actually "common assumptions nobody's thought to question". If your only reason for something is that it's common wisdom or common sense, you really need to consider your position in more detail! If it's actually just a matter of being obvious or common sense then coming up with a compelling case for it is trivial, so this doesn't take much time. But if you can't make a compelling case for yourself, it's a good sign that perhaps you need to rethink your position.
Tikhon Jelvis at Quora Visit the source
Other answers
I don't think your concern is unreasonable. I remember being overwhelmed in the same way when I started. As you gain experience, over many years, you will begin to see how all these technologies are related to each other. And you won't need to actually try everything in order to have an intuition on when it might be useful to you, or whether you'd enjoy it. But at the beginning you don't have this intuition, and so it can seem very unclear where or how to start. Here is my advice: instead of trying to "learn to program", just try to use software to solve some problem that you actually have. This way the problem domain will naturally limit the available techniques, and as a side effect you'll be more likely to stay motivated. So, do you like playing games? Make a game. Want some specific mobile app? Build that. Are you a musician? Maybe something related to audio then. There are still many options even within one little area of programming, so once you've picked the problem you want to solve, try to just stay focused on that. Don't worry to much about doing things the "right way". You're not going to get anywhere near "right" for many years yet :). Instead just pick the first approach that seems to move you closer to your goal. You will go down many dead-ends paths. Don't worry about that. Those dead-ends are incredibly valuable learning moments. You may not use what you learn on this problem, but maybe the next one, or maybe one a year from now.
Aaron Boodman
Alright, I'm going to come at this a little differently. Especially since I have had five major career changes and many jobs. In addition, sorting out and helping find people their career choice has been one of my skills. You seem to have a fascination with a specific skill which you believe will then provide you with happiness and contentment. As a person who has sorted and counseled programmers through their life issues, including doing therapy in the cafeteria at Apple with a guy in Cupertino, they are an interesting group. Driven and focused, they have a tendency to make their life work the same way they push binary bits around in coding. There are ways to do it right (elegant) and ways that are sloppy and cause crashes. But they are absolutely on or off, right or wrong ways of looking at things. You are approaching this like it's a logical process and using your intelligence to sort it out then arrive at the right answer. Problem is, this is your life not a formula, you're a human not an equation. "It seems statistically impossible to sort through..." is one of your clues you are using the wrong tool in this arena. "How did you know" and "am I naive" are questions you ask. You are leaving out the way life works and coming at this like a creationist. All those languages didn't pop up as you see them now. They evolved over time with a lot of hard work with many trials and errors. And like life, there were more dead ends than successes. Ahem, mistakes. You seem to be unwilling to risk making mistakes that must be made in order to dis-cover who and what you are. You seem to prefer becoming a cog in the machine humming along in the right slot. As a therapist I can tell you, that method kills people. You are not an android. Performance is not the highlight of life, experience is. And when people reminisce, they tend to talk of what went wrong in their best laid plans and the struggle to overcome them. That's what made their life feel worthwhile. So yes, you are being naive. Read 's answer to: He talks of the all the pushing and pulling every system has with politics. It's always a swamp. Another hidden aspect of your inquiry is using the pronoun you instead of I. That is detaching yourself from who you are. Talking like you are someone else, instead of owning yourself. That detachment is another way to keep the secrets in you hidden where they are not even noticed. Try saying "I am confused." rather than "You know how you are trying to figure out what to do." It will help integrate the emotional part with your intellect, which really seem separated. After I left my second career in electronics, which I loved by the way, I went back to university to become a high school art teacher. I didn't make it. I found the "ologies": psych, soci, antho, etc. and ended up....a Parole officer. WTF. Especially since I had evolved into a hippy. My friends were not pleased. It was a nessesary stop on my way to learning who I am. I had two more career moves to make. Who knew? So if you have an inclination to code, just jump in with who seems to explain it the best. You will soon discover which one lights you up and which feels like drudgery. And who knows, you might be working and get frustrated the damn chip isn't designed well and if they just did such and such it would get the job done much better. And before you know it, you're taking classes to learn how to work for Intel and make chips. Sometimes it's best just to jump in the pool rather than sticking your toe in to check the temperature first. Credit: Barry Deutsch Jump.
Mike Leary
I agree with , I think you are putting the cart before the horse. If you are expecting that you are going to come out of a university fully specialized in a single domain and an expert in that field such that a person will snatch you up as the expert... you're wrong. It doesn't work that way. You want a REALLY strong general foundation in programming. You should know at least 2 languages so that you understand the complexities of changing and adapting to a language. And you should be really good at learning, because you will do a lot of it after your first job. Your first job is going to be a HUGE learning environment. You will want to find some place interesting to you, but you will make it easier on yourself if the spectrum is wide. You will want to learn from everyone there and adapt yourself. You may find that this is not a good fit and decide to find a different job (that's okay), but do understand "not a good fit" and "I'm dreaming too big." I did not specialize in C/C++ programming until my 6th year of working. I didn't specialize in 3D visualization programming until about 8 years after that. Even then I was cautioned by my supervisor at the time that specializing has risk.... "3D graphics might be a fad and you'll be out of work in 6 years." :) it... could... have been.... but I never believed so. ;-)
Jeffry Brickley
You don't focus on a language, you focus on the context. Each language is, by default, among the best in a given context. For example: You're interested in data processing. You want to find patterns, analyze numbers and discover things that other people missed by comparing absolutely brutal amounts of data. You'll be focusing on one of the languages that was designed specifically for that, something like http://www.r-project.org/ or Scala. You want to build websites, top to bottom. You want to know what's required to get a project up and running, and you want to be able to do it all yourself. You'll focus on something like PHP, JavaScript, HTML, CSS. You want to be a jack of all trades, and need a language you can not only apply to every context, but can do so easily and even transfer knowledge to others without much difficulty - you'll choose Python or Dart. You want to create wonderful visuals with code. You're interested in fractals, 3D, equalizers, light shows. You'll go for Processing, or maybe play around with JavaScript and WebGL, maybe go for something fancy like ThreeJS. You want to create browser based games - you'll use ThreeJS, HTML5, CSS and/or Dart. You want to create installable desktop computer games. You'll use C++ or Java. You want to create mobile apps. You'll use HTML5+CSS+JavaScript for all platforms, or develop native apps in Objective C for Apple devices, and Java for Android. And so on... there are more contexts, but you get the gist of it. In my case - I like being able to deliver an idea FAST. I like the fact that I'm able to go from zero to complete and fully tested product in a week. This is why I went with web languages - HTML, CSS, JS, PHP, Dart. Your case may differ. Don't try to catch them all - being a master of few is better than being a jack of all trades. Once you find your context, you'll find your language.
Bruno Skvorc
In a sense your question answers itself. One should not path oneself by tools...one should instead path oneself by the goal one wishes to achieve and THEN choose (or invent) the tools that will make that happen. I identified an opportunity 14 years ago to build a holistic platform for distributed application development for web applications. I evaluated the options of platforms and languages and selected java as my core language for building the AgilEntity framework. To facilitate other functionality I also needed to use xml/xslt/javascript/css/jsp and sql but all those choices came after I had identified what I wanted the frame work to do. Always lead with your goal and then pick tools, as you perform more projects you garner the intuitive problem solving capability that separates great engineers from just a programmer.
David Saintloth
This is a hard question to answer, if you don't know what you want. Hell I don't even know what I want. I have worked on several frameworks, languages, each so different. But I realized sometimes it is better to have a repertoire of techniques to solve problems. Ultimately it boils down to whether can solve a problem or not. Software engineering has changed so much from 2000 the year I started my career. It keeps evolving. I will say it is hard to play the catch up game, because all the others are doing it too. .Net wants to catchup with Java, Java wants to catch up with Scala and other functional programming languages. And in this race no one talks about EJBs any more. Imagine spending years working on EJBs and suddenly there is no demand for it. Well that might happen to the so called buzz words. However if you want to keep up with a trend, check out the http://www.thoughtworks.com/radar/#/ website of Thoughtworks. They recommend certain aspects of software development one should focus on. Considering they have been in the market for a long time, that is a good place to consult.
Pramodh Nanjayya
You seem to have overwhelmed yourself unnecessarily. Step back, and relax. There is no one path, there are fewer "experts" than you think, and this stuff is learned by doing and stumbling and failing and succeeding. You should just build something, in any language or environment you'd like to start with. You will learn a lot about what you don't know. At that point the path will be clearer: learn these three things, improve this implementation, understand that process better, etc. If you're a studious type with a lot of free time, pick up a comprehensive book on on algorithms, learn the language that is written in, and start to work through the problems. Just do your best. It will come to you. Keep moving forward. At some point you'll have a fair idea of most of the problem areas that developers work in, the patterns and their nuances. Keep exploring those. Eventually, you'll have a strong *general* understanding of what software development involves, and will be able to learn the basics of a new language rather quickly. At some point along the way you'll find something that appeals to you, that you understand (or at least like so much you're willing to do the work to fully understand it), and you will, before you know it, have a real skill of some quality.
Sandro Pasquali
Start by sampling the available fields. It's generally not difficult to give it a spin. I know you can easily check out web development (front- and back-end), primitive game development, and with some more effort, systems-level programming, without a serious investment (a few dozen hours at most). This is probably true of other fields as well.So sample everything you can and see which one attracts your interest the most. In my experience some of those options will just feel wonderful, even when the work is by any other person's standards awful.You can also get a bit of evidence from your language preferences: I know I've always found lower-level languages like C to have a certain elegance to them, and as it turns out from minor projects, systems-level programming is indeed my chosen course, or will be when I learn enough to do it well.
Daniel Philippus
I think the first thing is to develop a good foundation on general programming practice, algorithms, data structures, and so on. Of course you will be learning also a programming language, from the beginning. Languages come and go, but if you have a good, solid background, you will take that knowledge from one language to another, see each new trend in language through what it proposes and be a good developer.
Cesar Gil
Related Q & A:
- How can I find the minimum number of open rectangles in a grid?Best solution by Stack Overflow
- Where can I find the best animation software for free?Best solution by Yahoo! Answers
- How can I find the address with just a phone number?Best solution by Yahoo! Answers
- How can I find address from vehicle number?Best solution by Yahoo! Answers
- How can I find my career path?Best solution by eHow old
Just Added Q & A:
- How many active mobile subscribers are there in China?Best solution by Quora
- How to find the right vacation?Best solution by bookit.com
- How To Make Your Own Primer?Best solution by thekrazycouponlady.com
- How do you get the domain & range?Best solution by ChaCha
- How do you open pop up blockers?Best solution by Yahoo! Answers
For every problem there is a solution! Proved by Solucija.
-
Got an issue and looking for advice?
-
Ask Solucija to search every corner of the Web for help.
-
Get workable solutions and helpful tips in a moment.
Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.