views:

117

answers:

7

Hi, I'm a 20 year old Undergrad studying computer science at UC Berkeley. I’m scheduled to graduate in the next year or two, and I realized I haven’t really been thinking much about the future.

This summer, I have been working at an University lab doing some small scale HPC/parallelism work, and StackOverflow has been a ridiculously awesome resource for me. I always try to answer a question or two after posting one of my own, but after spending (an increasingly larger) amount of time here at SO, I realized there are so many aspects of development I have no clue about.

I've always felt that the curriculum here at Berkeley is rigorous and will prepare me well for any kind of development job that I chose. I mean we have the (MIT clone) cs61a SICP scheme class that makes over 60% of the class cry. We also have some great professors that I've had great luck in taking classes with, who actually have worked in the field. My compilers class for example taught me the importance of source control and the debugger (I'm a reforming printf :). I've taken and reasonably mastered pointers and recursion through course work, and the long projects helped me budget my time and work with other programmers.

However, when I take a look at SO, I realize that I can only really answer with any sort of confidence a tiny tiny tiny tiny fraction of the questions posted here (mostly C and C++, regexes, algorithms, kernels, and parallelization). By in large, most of the questions seem to have something to do with IT (databases etc), web development (insert frameworks here), or something about mobile apps. Also, after reading a lot of blogs and stuff over the summer, I get the feeling that systems programming is rare, and hard to come by now, and pointers are evil. And all this stuff with XML... I don't get it :|

I guess my question is, is this what the industry composition is like, and should I try learning the buzzword techs before graduating? Because honestly I don't feel prepared for this yet. I've worked very little with different frameworks and databases, and my web development resume is limited to writting silly php madlib generators and hacking badly designed servers in computer security class. I've only recently really migrated to managed code for non-kernel projects (keeping the C speed instincts at bay), and I'm not too sure how to approach this huge array of new technology and frameworks that everyone seems to be using.

While I want to go to graduate school eventually, I also want to try working out in the field for a few years. What do you guys, who are the top of the line in development, think? Can I get a decent job with my skillset?

A: 

From one student to another - it depends on what you want to do after you graduate. That said, knowing a little bit about web development, database design and development, and even system administration would be a good thing. But you don't need to be a master.

I'm currently a software engineering student entering my final year in September. I've focused on general software engineering topics, along with minors in communication and management. I intend to move into project management positions as soon as I can. If you want to move into web development, then you really need to know these topics. But it sounds like you have a well rounded CS education and could do work in any number of areas. I would definitely suggest picking up a little web development to continue rounding out your experiences, but I would suggest focusing your efforts on whatever career path you want to take.

Thomas Owens
+3  A: 

Yes, teach yourself some web and database programming.

Try to get something with your skills and in your interests, but a large percentage of programming jobs are web/database stuff. Consider it your "fallback" option (it's better than << insert crappy job here>>)

BioBuckyBall
+4  A: 
  1. Any one person here can only answer a small subset of the total set of questions here. That's the point - that there are a large number of people who specialize in a vast array of subjects. Don't read a list of random questions here line by line and judge your "General Programming Knowledge" by it.

  2. Knowing web development would help you gain a career in web development and contribute to your success at it, yes. I'm not sure what you're really asking here. Is there a lot of demand for web developers? Yes. I wouldn't say that systems programming is 'rare'. It likely has a higher learning curve and you may spend more time in that curve than you would in web development. But then, it depends on who you're working for, what you're working on in both cases. Choose something that you think will keep you interested.

  3. There's a lot of material and concepts you learn in school - and not just from the books, but from 'collateral' input such as a teacher's asides or other student's comments. One thing you can absolutely expect no matter where you end up, is to dump a LOT of what you learned in school, or at the very least, to apply it in ways you'd never be able to comprehend without practical experience. Don't take the 'pointers are evil' stuff too seriously.

  4. 'Decent job' is a very subjective phrase and ultimately the specific work you do all day (which will change over time) has only so much to do with it. Other factors include money, how much you're learning, how well you get along with your peers, your commute to work, the hours you put in, how important it is to feel like you 'accomplished something' or 'made the world a better place' at the end of the day, and so on.

Again, take a stab at something you think will hold your interest for awhile, get whatever job you can stomach doing it for awhile, and use it as an opportunity to learn not only the programming skills but all the other skills you need to be a good programmer which have nothing to do with code.

Superstringcheese
Pointers are evil, so remember to get the laugh when you use them from the proper part of the belly. Try it now… “Bwahahahaha!” See?
Donal Fellows
+1  A: 

If you want to write software for the widest audience possible, the web is the only way to go. That said I'm not sure if it'd be as helpful to learn a particular framework then to learn how the web works. Rather then try to learn web development outright, you might just want to buy a book on HTTP, and something on HTML. This can be a basis for understanding what all the different web development frameworks are trying to do before committing to a particular framework. Download Firebug for Firefox and just start fishing around on sites you visit.

SQL is a technology thats been with us for awhile and, for better and for worse, isn't going anywhere anytime soon. So you definitely want to be familiar with relational databases and what they're about.

Frank Schwieterman
A: 

100% worth learning, even if its just the basic stuff, am sure we can all see modern software is about the web or going more towards the web

soran awla
A: 

Personally, I don't understand why anyone wouldn't want to learn web development: it's the near universal presentation layer for client-server computing. But then again, I've been working with it for most of the last 16 years, so I'm probably biased. :)

Databases, though... having a good idea of the capabilities of and principles behind databases isn't just for web developers. It's very broadly useful -- there's not many areas of Computer Science or Software Engineering where it wouldn't be helpful to know how to use some of the most prevalent available tools for storing, retrieving, and processing data effectively. Even if you don't invest in web development, you should definitely pick at least one of the relational databases and learn it well enough along with some relational theory that you're comfortable with SQL and discussions about database architecture. It's probably worth poking at one of the key-value stores or a Prolog/Datalog or something else non-traditional as well. It'll give you some good tools in your box and probably save you from reinventing the wheel (unless you get bitten by the bug to write your own ORM, that is, which is pretty much the equivalent of getting involved in a land war in Asia).

Weston C
A: 

It is valuable. Very valuable. It will give you more options and provide you with choices. Everything you learn is good, and every time you learn something new you become more aware of the things you knew before and of the things you yet know nothing about.

But, you don't have to do it if you don't want to. You just have to understand it - know what it is and why it exists.

If you don't like it and don't want to be in that part of the field, then don't. There are many other ways to go in your profession, and many other things you can become good at.

igorbel