Managing the "jack of all trades" concept : not focused on one thing, professional in a limited number of things [closed]
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 1 year ago.
Improve this questionThis may be closed, a couple of minutes from now, but I think I should still ask this. As I have seen in the industry, it really helps if you know more languages than just one; if you can work with a number of SQL engines than just one, and in rare cases, if you know both software engineering and programming (etc, etc, and the list goes on).
When I first started programming (a year ago), I went with PHP and MySQL. Then I went to Odesk to start searching for side jobs and I was overwhelmed; it was not just "PHP", it was Wordpress, Joomla, COdeigniter, Zend etc. Knowing that, I decided to study Joomla, Codeigniter and Kohana. While开发者_JS百科 I was doing some web browsing, I came across Python and Ruby. Then I decided to learn Python, Django and Pylons. After browsing some more, I came across PostgreSQL and MongoDB. So, along with MySQL, I decided to study PostgreSQL and MongoDB.
Before I decided on studying them, I read about them: what makes people switch from one thing to the other, what makes this better than this and all that.
However, my curiosity is once again on the loose as I heard about iPhone and Android development (especially when ASE came to play, allowing me to use Python and PHP for Android), so, a few weeks from now, I may be walking on completely new grounds again as I go for exploration.
I just can't control my urge for exploration and learning new stuff, but I am worried that in doing so, I may not be able to be real good at one or some of these things (my aim is to be a web developer proficient in PHP, Python, web design, and the aforementioned DB softwares). SO in order to manage things, I decided to stick with web (and mobile web) development (I was even planning on doing some AI, game and desktop programming, but I had to give that up) particularly with the aforementioned technologies.
But then what I read from lots of "jack of all trades" articles come into mind: You can only be either good at one or good at nothing at all.
Has anyone of you been proficient in more than just one programming language, or more than just one database software (And by proficient I mean "really good")? How did you do it? When/Where did you stop learning entirely new things?
I find the logic of a 'jack of all trade but master of none' can sometimes be a fallacy.
A broad knowledge of different fields, programming languages and technologies can let you see patterns, relationships and solutions which you would be oblivious to if you only knew or worked with a very specific set of tools.
There is a phrase people in medicine use: 'show an oncologyst a patient and they will find a cancer, show a neurologist the same patient and they will find a neurological disease'.
Sometimes being very specialised biases your view to such an extent that you try and apply your very specific knowledge to fit a problem rather than looking for the best solution.
This does not however mean you cannot be an expert at many things. You mentioned you had only been programming for a year. You are obviously very enthusiastic and have aptitude, but thats a very short time. You will have many years to become intimately familiar with many aspects of your craft.
Has anyone of you been proficient in more than just one programming language
There are only a few distinct language paradigms, and within those most languages only vary significantly by syntax, library support and programming environments. Once you learn a few types of languages learning more becomes trivial (I guess similarly to natural languages).
Personally I would not consider simply knowing many languages a sign of being well rounded in computer science/software development. It's pretty well taken for granted you should be able to pick up a given language or dev environment without much effort.
Being familiar with different fields, such as Machine learning, Artificial Intelligence, Numerical Modelling, Computer Vision, Computer Graphics, many branches of higher mathematics, etc... is much more difficult to achieve and maintain. Such things I often lament not knowing and seemingly not having enough time to experiment with. I guess it depends on what you need to use though.
As Akusete sums up nicely:
There are only a few distinct language paradigms, and within those most languages only vary significantly by syntax, library support and programming environments. Once you learn a few types of languages learning more becomes trivial.
Instead of learning both Java and C#, it would be better to learn Java/C# a procedural language. Same goes for databases; by playing around with a relational SQL database and a NoSQL database, you will learn a lot more than you would by learning MySQL and PostgreSQL for example.
The real challenge isn't so much in learning the different principles. It's much harder to stay proficient with those principles, because you'll need to actively work with each technology on a regular basis and there's only 24 hours in a day.
PS: I think this should be a Community Wiki :)
See this.
Elsewhere on SO:
- the-benefits-and-advantages-of-being-a-jack-of-all-trades-programmer
- is-it-better-to-master-a-few-programming-languages-than-to-learn-many
- is-it-better-to-go-broad-or-go-deep
- is-it-better-working-on-a-single-technology-or-working-on-different-ones
- how-important-is-it-to-choose-and-stick-to-a-technology-stack
As an analogous example: The field of medicine is rather broad branching from neurology to oncology. But practitioners will always have a baseline of knowledge, after which they pursue their own specialization.
Building that baseline knowledge is very important. Thing such as OOP concepts, MVC, coding best practices, etc. should be clear to you. My advice: Pick a language/platform, and be really good at it. Be a Python wizard or a Java guru. The knowledge you gain from that is transferable to other platforms you will learn. Since you are in the beginning of your career path, progressively master one/two platforms at time then you can start jumping to learn other platforms. Too much fragmentation is also bad in relation to adopting new skills especially if you're new to it. Jumping from one platform to platform garbles one's knowledge forcing you to re-learn or review often. So again, have that baseline knowledge developed.
Your skill-set will progressively and surely broaden overtime. Don't rush to eat the whole pie or you'll choke.
精彩评论