Extra Credits: So You Want To Be a Developer (Part 1)

This week, we discuss the skills it takes to be a great developer (with lots of help from the folks at Stack Exchange).

Show Notes:

Special thanks to Stack Exchange!

Audio Version:
Download

Recent Comments:

  • Ok, time for the mandatory song link. We should've had this earlier in the thread really.
    http://www.youtube.com/watch?v=v4Wy7gRGgeA

  • I study drawing and recently started studying music and animation. I said it before and I'll say it again: Your show applies to these (and many more I imagine) arts as much as in video games!

    I mean seriously, take this episode and you only have to change a few words to present it to a drawing or animation class!

  • I always wanted to be a developer since I was a kid, but I am currently struggling on whether or not if I should stick to it. I started my second CS class at my college recently in which we learned about the workings of a computer such as how a processor works, io outputs, and etc. I found this incredibly.... boring. I always was interested in coding and solving intricate puzzles, but learning about the inner workings of a von nehman computer left me very uninterested. This concerns me as this video describes how programmers must be interested in the working of objects and machines, but for some reason I don't think I have that talent. Any advice or reassurance anybody? I know I was a little late to the party on this episode.

    :|

  • Similar to a great number of fields (academic and not), there is a very wide range of "levels" in which one may gain expertise. By levels, I mean abstraction. In the same way you have theoretical vs experimental physicists, or pure vs applied mathematicians, etc, you have CS graduates who are more familiar with the high level abstract aspects of the field and others who are closer to the technical aspects.

    Computer scientists who become experts in the theoretical aspects of the field resemble applied mathematicians. They are computational scientists. Their problems revolve around computational theory and the like, problems which a few decades ago were tackled by mathematicians (because computer science wasn't a thing yet).

    On the other hand, we have the computer scientists who work in the "low level of abstraction" side of things. They work with hardware architectures, or low level communication protocols, or chip designs, etc. Here you will find a large crossover with electrical and electronic engineering.

    This is a gross oversimplification of the two extremes. There are other aspects to CS and there are certainly jobs and positions which require bits of knowledge from both low and high level computer science.

    This next paragraph is a bit of a rant. It's something I'd like to share to get opinions on, but you can skip it (it may have also been mentioned in the thread already but I don't remember and I've already spent more time on this post than I should):
    [spoiler:1h92gh1w]In recent years, from talking to colleagues, professors and friends in academia, I have noticed that CS departments in Universities have started shifting away from the classical CS curriculum and are slowly becoming web-developer generating machines. This is only natural of course; the supply follows the demand. The industry has changed and CS graduates need to be prepared for industry jobs if that's what they're going for. A web developer doesn't *need* to know the von Neumann architecture. It's just a bit of a shame that the percentage of CS graduates that are less educated in the theoretical parts of the field is growing. We're producing less scientists and more IT professionals. I understand that this is just the opinion of someone from the academic side. I'm sure the people who are actual IT professionals feel this is the right way to go.[/spoiler:1h92gh1w]

    Ok, back on course. It's fine if you don't like the computer architecture course. It may not just be the material; it could be the professor, the way he teaches, the lack of interactivity with the course material. It could just be you. You can't love all aspects. I had to learn the TCP/IP stack 3 times for various courses during my studies and I still can't remember anything. I can never remember these kinds of things, the parts you just need to memorise to write them down during the exam and no real understanding is required. Or for instance, databases. I always found database courses to be extremely boring, even though I wasn't bad at them in any way. In my opinion, it is possible to become an expert in computational theory without knowing how a CPU works. It would be good if you had a basic level of understanding of how a CPU works though, so a minimum dedication to the "boring" courses will be required.

    Bottom line, I wouldn't be too discouraged. It's your second class, after all. I can understand how it might be a bit frightening to think that you might end up stuck in a field that's very different from what you expected, but if you like programming and problem solving as much as you say, there's definitely a direction for you inside CS.

    Perhaps you could look ahead at what courses you are going to be doing the following years, which I'm sure you've already done when applying, but going through all the Wikipedia articles on each subject (again, if you haven't already). Wikipedia pages on CS-related subjects are very well written and they'll give you a great taste of what's to come and whether you will like it. If there's absolutely nothing to your liking, that might be the time to reconsider.

  • miniknight, consider everything Achilleas said. But also look into applied mathematics. They don't concern themselves with hardware at all. Of course, majoring in mathematics, you would have to take some courses in pure math. Analysis, abstract algebra, etc. I don't know how you feel about these. But as Achilleas said, there is a big overlap between the more abstract CS and the more applied mathematics. A lot of it is problem solving, figuring out algorithms, their order of operation, writing implementations of these algorithms, and so on. Not much different from CS. The biggest shift is that you would see a lot less data structures and a lot more linear algebra.

    I'm not sure it is your sort of thing, but if you are feeling dissatisfied with CS courses, it might just be.

    You can't love all aspects. I had to learn the TCP/IP stack 3 times for various courses during my studies and I still can't remember anything.

    I'm not sure I ever met anyone who had drastically different feel for TCP/IP stack. Including people who wrote their own implementations.

Join The Discussion: