DEV Community

Discussion on: CS Graduates (and not): A Question

Collapse
 
dmerand profile image
Donald Merand

It's hard to generalize about this, because in all cases it depends on the person. Some self-taught programmers have way more theory than many CS grads I know. To paraphrase (good) Will Hunting: "You're paying all this money for an education you could have gotten for a $1.50 in late charges at the public library."

I can tell you some parts of the CS education that I received that I would have been unlikely to learn on my own, at least early in my career:

  • Algorithm design + analysis. Going through sooo many algorithms, learning how they tick, analyzing the bejeesus out of them so that I ended up with a "gut feeling" for whether an algorithm is going to need optimization (o-notation).
  • Lambda calculus + functional programming. They started me on Scheme/Lisp back in the day, and there's no way I would have started myself on that. I didn't start myself on that, in fact. Before college I'd only programmed DOS batch scripts + Pascal programs. But... functional programming is awesome, and getting exposed to a diversity of thought around programming approaches was very important to my development as a coder.
  • Network topologies + how networks function. It's amazing how much mileage you can get out of knowing WTF TCP and UDP are.

On the other side, here's a small sampling of things that I've picked up on my own that they never taught me in school:

  • Databases. I guess there was a database class? But it was optional when I went to school. Those are pretty important.
  • Javascript / HTML / CSS. Those things are covered very heavily by bootcamps, but the attitude in school was "Meh, it's just markup languages + a C variant. You can learn those on your own." Which was true.
  • Design. Nobody ever told me how to make a thing look nice. It was never a requirement in school. But now I make apps all day, and people want them to look nice. Thanks to Edward Tufte and many others, I'm not floundering in the dark on this one.

I'm really glad I went to school for CS - I knew I wanted to and I got a good education that's served me well. But I think the story is different for every person, so it's important not to draw lines in the sand or form camps where no such distinctions need to be made. We're all in the same boat now, after all, it doesn't matter where we got on.

Collapse
 
yokim profile image
Yokim Pillay

Definitely! I love that paraphrase.

You make an interesting point on the diversity of thought in functional programming, do you think those 'thoughts' have changed since being in school to a working environment?

Thanks for your reponse, I really appreciate the insight. :)

Collapse
 
apotheon profile image
Chad Perrin

I see, elsewhere in discussion, that you're apparently not a college-educated developer. If you're interested in some introductory instruction on the subject of functional programming and lambda calculus (as well as turing machines, finite automata, and so on), in a way not much at all like you'd get at college, I'd recommend an O'Reilly book called Understanding Computation. It's very good, and uses Ruby as an implementation language for some interesting stuff, but you don't have to be a Ruby dev to "get it" or use it. The book is very well-written, very approachable, and (in my opinion at least) a lot of fun.

Collapse
 
dmerand profile image
Donald Merand • Edited

Thanks! That's an interesting question - I'm interpreting you as asking whether I think the main approaches to + thinking about programming languages have changed since I was in school.

On the one hand, this stuff's all been around forever. Functional programming since (before computers, and object-oriented programming for decades at least. Imperative models are also pre-computer, and that's pretty much all there is, approach-wise, for what people are using in production.

On the other hand, each new language brings a new approach, and sometimes those approaches shed new light on these same old ideas. For example: Joe Armstrong published his Erlang Thesis while I was still in school, but at the time Erlang's approach to message-passing functional programming using Actors (or, as some would say, the original vision for object-oriented programming was novel. That architecture allows us to write gorgeous, distributed programs that have a previously-unseen level of fault-tolerance and modularity. Nowadays we also have Elixir, which adds a layer of beautiful syntax, and a suite of amazing tools, along with some new ideas, to that Erlang core. Neither Joe Armstrong nor José Valim invented functional or object-oriented programming, but they've pushed the needle for sure. Personally, my exposure to Elixir + Erlang has changed the way I write code in other languages as well.

I hope that answers your question somewhat!