|
Sander Rossel wrote: Sure, learn one thing and learn it well, but don't forget to look around so you can put your knowledge in a little perspective.
When I graduated from college it was possible that a person could know a single language and use only that language to have a successful career. It's still possible today ... but only in very select areas.
Today? Ya wants ta be a web programmer? That requires learning a primary language like C#, Java, PHP, etc. Plus Javascript (and libraries like Jquery). In most cases some type of database is required. Plus more ...
I wouldn't bother interviewing anyone who knew just one of the above. They can only do part of the job. Other than someone new out of college, I look for people with a mixture of breadth and depth. Enough depth to know some technologies well, and enough breadth to develop a wider perspective.
When mentoring new grads, I recommend knowing a little bit about a lot of things, and knowing a lot about a few things. And don't get to comfortable in any one technology -- all wax and wane -- and we move onto new ones.
|
|
|
|
|
What a lot of people, surprisingly, don't understand is that most, if not all, tools and languages we use are based on some common theory.
I'm a C# developer myself, but I'm pretty sure Java shouldn't be a problem. I know OOP, patterns, practices, libraries, memory management, etc. There are some minor differences between the two languages, and once you see that you see that learning something may benefit another thing.
BryanFazekas wrote: Plus Javascript (and libraries like Jquery) Some people have so little understanding of programming they believe jQuery to be a language
The trick in JavaScript and many libraries are, for example, closures and anonymous functions. Surprise, surprise, C# has them too. The funny part is that I've seen many blogs about "closures in JavaScript" (people find it a difficult concept apparently), but very few about closures in C#.
BryanFazekas wrote: all wax and wane -- and we move onto new ones New ones with the same fundamental theory
|
|
|
|
|
Sander Rossel wrote: I'm a C# developer myself, but I'm pretty sure Java shouldn't be a problem.
You're right and you're wrong at the same time.
I've worked in the major C-based languages -- C, C++, C#, and Java. The language constructs are either identical or quite similar. I can read any of these languages well enough to do a code review, and can decipher a host of other languages fairly easily.
So yeah, the language constructs of the basic languages are pretty much the same, there's only so many ways to do anything.
The issue is the libraries. Each of the above languages has a plethora of libraries that are either built into the vendor's framework and/or are commonly (or not commonly) used. Libraries differ greatly in scope and organization, and can be very complex. Knowing one set of libraries doesn't mean we can immediately work effectively in another. Learning curves can be steep.
In the past when hiring for Java projects especially, it was critical to get people with experience in not only a specific set of libraries, but in the correct version(s) of those libraries. I had more than one tech lead pull their hair out trying to find people with the right skills -- otherwise bringing a good programmer up to speed could take months.
[Personally, "modern" languages are unnecessarily over-complicated -- but that's a rant for a different day.]
If you don't believe me, install a Java IDE and reproduce a moderately complex C# application. It won't be impossible, but it will have its challenges. And frustrations.
|
|
|
|
|
BryanFazekas wrote: otherwise bringing a good programmer up to speed could take months It took me months to learn Visual Basic .NET, including many .NET libraries and OOP principles, to a point where I could develop non-trivial applications starting from absolutely nothing (no prior programming experience).
Taking that same time to learn a library seems a little long, at least for a good programmer. Especially when Google is just a click away
Sure, take WCF, or ASP.NET MVC, those are huge frameworks with a gazillion settings and options, it could take months to learn, but probably not to learn just the parts you need.
BryanFazekas wrote: Knowing one set of libraries doesn't mean we can immediately work effectively in another. Learning curves can be steep. I do agree wholeheartedly with that. But even then there's usually some overlap.
You probably know what kind of libraries are available. I don't know how to read and/or save a file in Java, but I know it's possible, probably io.file.something, so a quick Google search can give me what I need in seconds. A few years back I had a customer asking me to remove duplicate rows from an Excel spreadsheet he had. He had been trying for an hour, but couldn't find it. Of course I know what Excel is, but I never use it so I had no idea how to do this. What I did know was that this customer was looking for a distinct function. Google "Excel distinct rows" and I had it fixed for him in five minutes
In C# the map function is called Select , looking it up in another language shouldn't be a problem if you know what you're looking for
BryanFazekas wrote: If you don't believe me, install a Java IDE and reproduce a moderately complex C# application. It won't be impossible, but it will have its challenges. And frustrations. Will it be more impossible and frustrating than the original C#?
Of course, you're completely right though
|
|
|
|
|
I think that learning more stuff than specializing something is better in technology world since a lot of changes occur every now and then.I'm learning meteor which I don't think I'll use it for now in my web developing career, but it helped me understand some things about databases and javascript. Also I don't think it's bad knowing something extra and be open minded .After all isn't knowledge == power? Though if you can specialize a lot of stuff then that's the best ...
|
|
|
|
|
The idea behind specialization is the following. Let's say your specialization is writing software for a specific kind of printer, not many people need that and not many people really no how to do it. Now the deal is that there are always a few people who need someone to write software for that specific printer. And YOU are one of the very FEW who have the specialized skills and knowledge to do it. So sure, you can write their software, but it's going to cost them... Name your price, no one else can do it for them and they know it. Besides, you're the specialist, so that's worth something!
Compare that to a skill such as C#. Everyone and their dog need a C# programmer, but then again, everyone and their dog can write C# too! So it's nice that you can write it, but so can ten other people. Suddenly it becomes a little harder to name your price as there is a lot of (good) competition
Of course when you specialize and that specific printer you know so well goes out of production and support ends and ultimately gets replaces you better have a set of skills to fall back on
|
|
|
|
|
No one answer fits.
I will start learning what I need to complete the job at hand and then learn the other things that interest me.
Or go back and learn a better way of doing what the job was that was completed when there is more time.
|
|
|
|
|
Agreed. There is many time, when I finished the job, without even caring to learn the language
I do not fear of failure. I fear of giving up out of frustration.
|
|
|
|
|
I agree with this. First step is getting the job done, if you need to read up and learn something new doing that you usually pick up a few bits that interest you that you can later delve a bit deeper in to or you might come up with a solution that works but there are parts which you aren't fully satisfied with which you later can rework or analyse to see what could be done better.
|
|
|
|
|
Had one customer that wanted an interface to a CQRS-style API I had created for a robot to be written as a python library. I'd never done Python before so I learned just enough to give them a complete, importable library. I arrive on-site to install the system and show them how to use it and the programmer they assigned to the project says, "Ok. I think you're going to have to teach me how to use Python."
1) These 40 lines of code are about the extent of my knowledge.
2) No.
a posse ad esse
|
|
|
|
|