Skip to content

Instantly share code, notes, and snippets.

@nrktkt
Last active March 11, 2016 00:01
Show Gist options
  • Save nrktkt/35512770576f51df73fb to your computer and use it in GitHub Desktop.
Save nrktkt/35512770576f51df73fb to your computer and use it in GitHub Desktop.

On What Computer Science Is and Is Not, What Software Engineering Is, The Framework Fear, The Web Developer and The Council

So I'm going to go ahead and dive headfirst into the shitpile wearing nothing but my arrogance. If nothing else, skip to The Council

<rant>

What Computer Science is

Computer science is a huge field comprised of both theoretical

  • Theory of comp
  • Algorithms
  • Theory of lang
  • etc

and applied

  • AI
  • Graphics
  • Scientific comp
  • Databases
  • Networking
  • Security
  • etc

science involving computers and computation. Your college BS:CS attempts to cover these topics (and the skills you need to participate in them) leaning to the side of theoretical or applied, or into different topics depending on the program, professors and timing.

What Computer Science isn't

CS is not just one of its fields. CS is neither purely academic nor purely industrial.
Computer Science (CS) is not just programming. Programming is to CS as math or physics are to Mechanical Engineering. While a CS program must teach programming as a prerequisite, there is often much more to be learned before one can master programming. It is my personal opinion that Gonzaga does not teach enough advanced programming. Topics like design patterns, asynchronous programming, and functional programming are not well covered.

What Software Engineering is

Not that anyone asked, but Software Engineering (SE) overlaps CS but is not the same. SE is also more than just programming. In essence SE is the professional application of programming with knowledge of CS. When I say the professional application, I mean a whole load of BS on top. SE deals with process, maintenance, and other items needed for industrial grade projects that make industrial grade software.

Frameworks

As some have observed, you are not taught much in the way of frameworks and libraries. No JPA in databases class, no Rails in I don't know what class, etc. There are reasons for this.

  1. Frameworks tend to be somewhat easy to learn (see Web Development).
  2. There are a ton of them. Learning to use one framework, but needing to use another instead is almost, but not quite, as useless as never having learned one in the first place. I can almost guarantee that on any new job or project you will have to learn a new framework on the spot, if you're lucky (if you're unlucky you not only have to learn new frameworks, but also inherit a huge code base which is 10x worse).
  3. They come and go like the seasons. Currently node.js is "all the rage", it was first released in 2009 and hit its stride in 2014. In contrast, since 2004 the LAMP stack has bitten the dirt. For all you might want to learn node and express js now, when it loses popularity for the next thing you will wish you had learned something more foundational that won't go away.

Web Development

Web Development gets a lot of shite for being

an "easy" avenue for a programmer. Just because it doesn't require the most extensive algorithmic knowledge

Is web development easy? Maybe. It's certainly easier than AI. It does tend to be one of the quickest things to gain a degree of proficiency at. Most web development topics can be learned in one's free time from web tutorials or in a matter of months at one of the "dev boot camps" which are springing up like a case of herpes in a dorm carpet. Having interviewed dozens of web developers I've seen three trends

  1. The good ones already have some kind of CS background
  2. OR the good ones work really hard to learn things and expand their knowledge outside of what they had to learn to do web development.
  3. OR they are unable to work outside the frameworks or styles they were taught (angular and node.js or rails almost universally) and struggle to make something besides a UI and CRUDdy API.

The Council

What does all this mean for you? It means that yes, there is more that your school can and IMHO should teach you. Take these things up with your professors and department chair, express your desire to learn more advanced programming as part of the program curriculum. Each semester there are special topics classes, you can help influence what those are.
But there is also a lot you just won't learn in class. For this you need to build a community of people to share knowledge with and learn from. This is what the Council and the CS club are for. Some of the Council are now alumni, and there is even more you can learn from them. If you don't cultivate this community then yes, you will need to learn this all on your own.

But guy, I'm not really that into all this shit, I just want a fatty paycheck. Can I be screwed out of a job if I don't learn all this (git, continuous integration, RESTful web services, docker, rails/spring/jersey/node/play, react/angular, ...) before I graduate?

No, you're fine you damn casual. I came in a while ago and told the lot of you what it would take to come out of college and into the wild world of startups. I can understand if that was intimidating. If you aren't ready or don't care for all of this at once, you can get a job at a big company to start out and gain experience. They will have you work on some project which will likely never see the light of day while you learn the ins and outs of the company, their tooling, the code base, new frameworks, source control, etc. Big companies have this luxury, they consider the money they pay you to be an investment in a productive, beneficial you in the future. Startups and small or competitive companies on the other hand don't have this luxury. They look for people who can hit the ground rolling today and who will work hard because they are actually enthusiastic about the work.

</rant>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment