
Code != computer science - sarahallen
http://www.ultrasaurus.com/2013/12/code-computer-science/
======
woah
I look at this from the other side as well. I've worked with brilliant people
with ivy league CS degrees who wrote much messier and less maintainable code
than me, an autodidact designer/js dev with 1.5 years of experience. Maybe I'm
wrong, and there was something in their code that I wasn't seeing, but I don't
think so.

There can also be a bit of an attitude, like the person is thinking "of course
this is good, I went to Stanford". But maybe that's my imagination. Another
explanation is that these people are just so good that they are able to read
messy and convoluted code no problem, and us mortals need to step up our game.

On the other hand, these people would easily be able to reason about complex
performance and security issues beyond me. I think that the hardcore CS issues
are a science, while writing clean code in a web framework, browser, and API
design is more of a craft.

If you hire too many computer scientists, your code base could be full of
fascinating technical tricks, but creaky and hard to work with. Too many
craftsmen, and you'll get stuck on simple problems. It's a balance.

EDIT: Downvotes? Please explain. Perhaps I am not able to fully comprehend the
issues at hand.

~~~
NAFV_P
> _I look at this from the other side as well. I 've worked with brilliant
> people with ivy league CS degrees who wrote much messier and less
> maintainable code than me, an autodidact designer/js dev with 1.5 years of
> experience. Maybe I'm wrong, and there was something in their code that I
> wasn't seeing, but I don't think so._

I would have ignored your comment were it not for you mentioning that you
write javascript. I started learning it on and off a few weeks ago, and
yesterday I installed spidermonkey as a standalone shell. What I have noticed
is that a lot of the syntax that controls flow is very similar to C, which is
notorious for being gibberish. I'm guessing the same will apply to js. I do
not have a CS degree, but would you say that this is readable? This is a
function for extraction of nodes in a double linked list that I am currently
kicking into shape.

    
    
      /*
      *	extract *p__ from p__.
      *	but original *p__ is shifted left or right \
      *	    if there is still space.
      *	extracted ndi* is returned, but the remainder of the list \
      *	    is sewn back up.
       */
      
      ndi *extract_ndi(ndi **p__, const int dec) {
          ndi *q_=*p__;
          if(dec>=_PREV_) {
    	  *p__=*(q_->lnk+dec); /* the shift */
    	  if(*((*p__)->lnk+!dec)=*(q_->lnk+!dec)) { /* sew up */
    	      *((*(q_->lnk+!dec))->lnk+dec)=*p__;
    	      *(q_->lnk+!dec)=NULL; /* burn ends of extraction */
    	  }
    	  *(q_->lnk+dec)=NULL;
          } else if(dec==_LONE_) /* final possibility is that *p__==NULL */
    	  *p__=NULL; /* ie. dec==_DEAD_, no which ain't it not worth man */
          return q_;
      }
    

What the hell was I smoking when I wrote this? I can't even read it myself.

Writing convoluted code is more to do with a certain state of mind. You should
ask your coworkers where they obtain LSD, not where they got their degree. I
haven't come across any acid for about a dozen years, I think it has gone out
of fashion.

Of course if this was Perl it would be even worse.

~~~
userbinator
What I find when I work with "pointy" data structures is that it really,
really helps to draw diagrams to clarify your thinking. I can write a doubly-
linked list extraction with my eyes closed (and it'd probably _help_ to do it
with closed eyes, since I can more easily picture what's going on) but it very
likely won't look anything like yours... what's dec for? And all the
extraneous underscores in the variable names, I don't see why you need them.
What's wrong with p and p?

~~~
electronvolt
Drawing diagrams is one of the most useful teaching strategies I've found when
people are just starting to learn pointers. I've TA'd a course that introduces
students to C++, pointers, and basic data structures, and after five
semesters, I'd say that it's the single most helpful thing I've found when
they are first trying to wrestle with pointers. (They get to implement a
doubly linked list.)

------
andrewfong
Speaking from experience, this is true. You also don't really know when true
CS is useful until you run into it.

I graduated with the equivalent of a minor in CS. When I started coding for an
web-based gaming start-up in 2007, it was mostly irrelevant. You don't need a
CS degree to learn Ruby on Rails, nor is it necessarily useful (beyond your
basic intro courses) to have taken CS courses.

Flash-forward a year, after we raised our seed round. Our online game had
grown in complexity quite a bit, and we found ourselves having to deal with
things like complex image rendering, AI, and pathfinding. While it's possible
to get a decent grasp of these topics through Google and O'Reilly books, it's
definitely an order of magnitude more difficult than figuring out a new web
framework. As mentioned before, I only have a minor in CS so my exposure to
these topics was minimal, and there were definitely nights where I found
myself wishing I had taken another AI or advanced algorithms course.

~~~
jonny_eh
These "hardcore" problems like AI and pathfinding are definitely tough
problems. The issue is that there's an infinite supply of such problems and
there's no way a 4 year degree can cover them all. In fact, even if they did,
most lessons would be forgotten before they could be proven useful in the real
world.

Why not just learn these areas when needed? Taking an Advanced AI course in
just a 2-3 month semester is how many hours? Just spend a week or two hitting
the books and you'll be good to go, and you're knowledge will be bleeding edge
and up to date. Plus, you'll have been paid to learn it!

~~~
Ma8ee
Surprisingly many problems are similar, so in the end you can often apply the
methods from one domain to another. If you use your study time well you will
remember the general principles even though you might forget the exact
implementations and most of the details.

Most importantly, you have a much greater chance of knowing when a solution
exists and where to look for it, and more importantly know when no solutions
are known.

E.g., the computer scientist recognizes the travelling salesman problem even
when it doesn't involves salesmen, travelling or cities. She knows that it's
NP-hard so she doesn't spend a few months trying to find an efficient exact
solution for her millions of nodes, but she knows where to look to find "good
enough" solutions for the problems she is trying to solve.

The autodidakt might not even recognise his problem as a TSP and thus doesn't
even know that her problem is hard and which books she needs to start reading.

------
jd007
I've always thought of computer science as a branch of mathematics. To me
coding or programming is applied (or engineering) computer science, it's an
engineering field (hence the term software engineer). Just like there is
theoretical physics (a basic science), and also applied/engineering physics
(e.g. mechanical engineering). They are related fields, but specializing in
one does not mean you will be good at the other (it certainly helps).

The terms coding and computer science do get used interchangeably by a lot of
people though, since most may not understand the difference. I've learned to
live with it (occasionally I point out the difference, if I think the person
misusing the terms actually cared to know).

~~~
randomsearch
I would say some of Computer Science is mathematics. Mathematics is the
foundation of Computer Science, but CS is not a branch of mathematics,
although the origins of the field are found there. It is an important, core,
part of the subject, but it does not entirely encompass it.

For example, CS also includes Psychology, Graphic Design, social science, art,
etc.

Also, CS involves the teaching of programming, which is a craft (ignoring edge
cases) - crafts cannot be taught through maths alone.

~~~
a_olt
Absolutely, CS is an inter-disciplinary subject.

------
mathattack
My 2 cents on the computer science degree versus coding... (Full disclosure -
I have a CS degree from a large public school)

1) Many of the top coders, programmers and data scientists that I know don't
have CS degrees. (The top coder I know never finished school. He could move
from Assembler to C to Objective C effortlessly, and could do everything from
games to operating systems. He wasn't lacking for theory or versatility)

2) Despite this, a Computer Science is more difficult rigorous than most non-
engineering degrees. Even at open admissions schools, getting a CS degree
means being forced to solve difficult problems.

3) Because of #2, a higher % of CS majors make good programmers than most any
other major. (I've seen English majors make good programmers, but at a much
lower %)

4) Despite #2 and #3, there are still many unqualified CS majors.

5) There is no typical CS programs. Some are very flexible, some very
structured. Some have an engineering focus, some are part of liberal arts
schools. Some are too narrow, some are not specialized enough.

6) A few years after college, your grades don't matter. A few years after
that, the school doesn't matter. A few more years and your major doesn't
really matter. At that point, it's all what you've done with your time.
(Though it can help to say, "I have a CS degree. I used to be technical.")

------
mhogomchungu
Fundamentally,computer science = data structures + algorithms.

in a data structure class,you learn the basic structures like
PODs,structs,vectors and linked lists.

in algorithm class,you learn various basic sorting algorithms plus the big O
notation and thats pretty much it.

Then you will take a few physics classes,then chemistry classes,then maybe
calculus one and two,then probably discrete mathematics class,one or two
writing class,if you a lucky,maybe a single semester of operating system
class.

you may learn the basics on haskell in one class,the basic of java in
another,maybe assembly in another class and you get your degree.Basically,you
will leave school knowing only the basics of a bunch of things but not enough
of anything.

The above it how it felt to me as a CS major.

~~~
aleph_naught
People are incredulous when I tell them I use 90% of the stuff learned while
getting my CS degree.

Stuff I've done in the real world:

AI: I've lost count of the number of times I've had to implement A*

Graphics: wrote a ray tracer; matrix transformations

Data structures and algorithms: wrote an approximation algorithm for the
travelling salesman problem (christofides); fancier data structures like
bloom-filters, lru caches; and just every day coding

Databases: query optimization

OS: Made me aware of systems (context switching, caching performance,...).
Scheduling algorithms and how they affect the embedded software I write.
Concurrent programming.

Networking: Super helpful for everyday stuff when you understand the
underlying principles. I've had to implement an RFC from scratch (DNS).

Linear algebra: Used extensively in a path planner I wrote---with it I was
able to reduce the state space by orders of magnitude compared to the standard
grid approach.

Statistics: wrote an online algorithm for adaptive windowed linear regression

Even computability theory has been helpful, as it has strengthened my proving
and reasoning skills---helping me find holes in requirements, or proving
algorithms/invariants. Same with all the theoretical math courses I took
(Analysis, Set Theory, First Order Logic ...)

The list goes on...

Above all, my CS degree taught me how to learn CS and beyond.

Sometimes I worry about the potential solutions I am overlooking, because I
never fully branched into the continuous domain (control theory, etc).

~~~
lmm
Sounds like you've had a very interesting career; I'm curious where you've
worked. My impression is that most programming jobs are about CRUD-like
problems, adapting well-known technology to solve business problems. CS seems
like it could only help if there's a well-known algorithm (that would be
taught in CS), but no existing implementation available - but in these days of
open-source libraries that practically never happens.

FWIW I switched out of CS into Mathematics after one year. I've never
implemented A*, I've used raytracers but not implemented my own, used a bloom
filter but not implemented it, used an lru cache but not implemented one, used
adaptive windowed linear regression but never implemented it myself. When
optimizing database queries I've never needed more than EXPLAIN SELECT; when
optimizing performance I've never needed more than a language-level profiler.
I did actually implement an RFC from scratch (SMTP), but that was easy enough
to do by, well, reading it and implementing it.

------
catilac
I think this distinction is incredibly crucial. There has been so much talk
about how a CS degree is useless (and I for a moment bought that garbage as a
holder of a CS degree), but it is completely untrue.

As you work with more and more people in this industry, you frequently run
into people without a degree, or, more importantly, no true know how, as I do
stand by the fact that it's not required to have a degree to learn this stuff,
who behave as if they are experts regardless of their poor mental model of how
computers work.

It's important for these people to know what they don't know. Reminding people
that Code is not CS is a good way to make that happen.

------
fennecfoxen
Yeah, a CS degree isn't suuuper-helpful for organizing a coherent program
around a snazzy framework for the latest web technologies. It's for when you
need to do something like, oh, "figure out how to upgrade the work-management
system so you can move from coarse-grained lock system to a finer-grained lock
system with zero downtime." Then you think back to your old courses covering
Parallelism and the like, and plan it out.

------
sheetjs
> Treehouse CEO Ryan Carson declares “A computer science degree is a rip off…I
> know because I have one.” Perhaps his CS degree was from a college which
> didn’t have a very good program or maybe his focus has been web development
> where you rarely need computer science.

According to wikipedia:

> In 2000, he graduated from Colorado State University with a Computer Science
> degree

I suspect, like with most fields, that the school definitely matters (and that
he may not have arrived at the same conclusion had he attended a school with a
better CS program)

~~~
walid
Well if you think of it, a CEO like Steve Jobs will call the PC a truck... to
sell the iPad.

• Computer Science = Truck

• Treehouse = iPad

But how do you make iPad dev tools?

~~~
lstamour
> But how do you make iPad dev tools?

The same way you make a real-world video editing suite work on an iPhone and
have the guts to make that your seasonal and campaign: in a careful and
considerate fashion without trying to be all things to all people.

That said, if I had an editable Chrome dev tools on a tablet I'd be 50% of the
way there some days. :)

And ... Don't read too much in the car/truck comment. Eventually even smart
phones will behave like supercomputers. It's just a matter of time.

~~~
walid
You missed the point on what I was inferring.

> _The same way you make a real-world video editing suite work on an iPhone
> and have the guts to make that your seasonal and campaign: in a careful and
> considerate fashion without trying to be all things to all people._

It isn't about being all things. It is about a level of control you need while
working. This is actually a mathematics problem namely Godel's second theorem
of incompleteness which states and this is a brief description that "a system
cannot contain itself" meaning that you can build a system of components but
those components can't be built from inside the system. This equally applies
to software.

> _That said, if I had an editable Chrome dev tools on a tablet I 'd be 50% of
> the way there some days. :)_

Again you're conflating two issues. Not all dev tools can exist is a browser.
If they do then by definition they don't exist _in_ the browser anymore. A
paradox. If your dev tools can exist in the browser alone then you definitely
are using only a subset of necessary dev tools for other domains. It is
obvious that you are a web dev but then I'm not and the browser doesn't cut it
for me.

> _And ... Don 't read too much in the car/truck comment. Eventually even
> smart phones will behave like supercomputers. It's just a matter of time._

Then again you missed it. I wasn't reading into it. I was comparing how the
CEO of Treehouse was dissing CS degrees because he wanted to sell his
tutorials like Jobs was dissing the PC because he wanted to sell iPads.

------
wvenable
The first thing anyone in this discussion has to realize is that different
schools can have vastly different computing science programs. While there is
conceptual similarities between most computing science programs, they can vary
drastically in breadth and depth. And what one gets out of a program can also
depend on the path the individual student takes.

If you feel you got nothing out of your education or that your education was
mostly worthwhile, that may not reflect on computing science in general but
just of one particular implementation of it.

------
Bahamut
The value of a degree is what you make of it. I think the most important
aspect of college/grad school/etc. is that you have the opportunity to push
the bounds of your mind. I spent 4 years in grad school for math at an
excellent program, and to most people, it would probably be considered a waste
since I use almost none of it in my daily work (programming). However, the
value for me has been to push the limits of my ability to abstract concepts,
and see how other similar high level minds perform.

------
FrankenPC
When I was 16, I was obsessed with 3D graphics (hilariously primitive back 30
years ago). I learned programming to create , rotate, translate, and shade
objects in 3D space. I learned computer science to understand how you manage
vector lists, matrix math, and strange recursion algorithms. I learned that
programming is computer science applied. Sort of like how math is a tool to
apply calculus to real work problems. One won't work without the other. Saying
"code != computer science" is a misrepresentation of the symbiotic process
that's going on in the human mind. I think a fair statement is:
programming(code) is the first level of computer science knowledge.

~~~
zhemao
Isn't that exactly what the author is saying, though? He's saying that
programming is part of computer science, but knowing how to code doesn't mean
you know computer science.

~~~
FrankenPC
That's not what I'm saying. Saying "code" and "computer science" are two
different things is a bit ridiculous.

------
alan_cx
Coding / programming is _part_ of computer science. CS includes maths,
electronics, micro electronics, logic gates, how hard drives work, and what
not. CS is about computing and computers as a whole. So, coding is only a part
of it.

In fact, I see this title as the wrong way round, it should be: computer
science is not coding. Too many people think codes know all about computers.
In my experience, they dont. They have a limited skill set. Just like support
staff who usually cant really code.

Having a CS degree myself, I have always felt at an advantage over people who,
for example, only program but know knaff all about hardware, OS's, servers,
etc, and support people who only have things like MCSEs, and don't know the
low level fundamentals.

For me, having a CS degree makes me a jack of all trades, all be it, master of
none.

~~~
illicium
At American universities, there is often a different degree for the hardware
aspect of computing: Computer Engineering, which deals with digital design and
other hardware stuff.

Computer Science is generally focused on algorithms and math, but the emphasis
on coding varies across universities -- some are way more math heavy, while
others have more software project work.

A few universities have a separate Software Engineering degree, like Cal Poly
SLO. The emphasis is on the process of software development and applying
computer science fundamentals to a product. This is the job of gathering
requirements, designing a piece of software, and, often, actually implementing
it.

SEs have to know how to structure software and put together data structures
and algorithms, integrating knowledge of the hardware (and underlying layers,
like the OS) that the software is running on. Computer engineers and
electrical engineers make the hardware and everything lower than the OS.
Computer scientists have to know how to develop new data structures and
algorithms. Making software requires the work of all three professions.

I think there's a huge difference between "learning to code" and "learning to
become a software engineer," or "learning to become a computer scientist." One
can learn to code without a breadth of domain-specific knowledge, which
obtaining a degree may give you.

------
pyrrhotech
The truth is that the world needs a lot more software engineers than computer
scientists. Yes, there are a lot of hard problems that are best solved by
government or academic research, but there is a lot more software eating the
world. And to develop the vast majority of that software, you don't need much
academic CS knowledge.

I know, because I have a mastered in CS and considered getting my Phd. I
decided to join industry instead, because I wanted more money. I hardly use
any of my CS knowledge on a day to day basis working as a web developer. Yet I
make $160k in my mid 20s while my 60 year old professor has never cracked 6
digits... It's sad in a way, but to each his own I guess.

~~~
kazagistar
I would far prefer to earn half as much if it meant working only on problems I
find interesting and spending my time teaching others, instead of churning out
websites. To each their own, but your pity for your proffesor is likely
misplaced.

------
daemonk
A 4 year degree is only valuable if you actually had the mental maturity to
take advantage of it at the time (I didn't). Unfortunately, that doesn't seem
true with the majority of the kids graduating from high school. They see it as
just another hoop to jump through.

If someone told me now that I can spend 4 years just learning things, have
access to intelligent people, and great resources/facilities without worrying
about a gap in my cv, I would jump at that chance.

I am going to hacker school in Feb, so hopefully it will be kind of like that.
Albeit for a much shorter amount of time (3 months).

------
tomphoolery
Like many things in programming, it all boils down to the samn damn arguments
that musicians have. Sure, you don't _need_ a music degree to be a musician.
But I'm damned proud that I have one, because it's helped me advance the one
thing in life that I love doing more than anything else further past most
people my age. I have a B.M. in Jazz Studies with a concentration in Vocal
Performance.

The only way you can reasonably believe that college was "a rip off" is if you
didn't have ANY fun that whole time. If you can honestly say that, then I am
sorry. You allowed a part of your adolescence become robbed by people who told
you what to do. But if you had even an ounce of enjoyment throughout college,
if the idea of learning computer science made you smile even one bit, then it
was absolutely not a rip-off or a waste of time.

"Your time was not wasted if you were happy" \- John Lennon

------
drakaal
This is like saying speaking fluent English doesn't make you a genius, and
being a Genius doesn't mean you will speak fluent English.

Having a CS degree won't make you a genius, or guarantee you write beautiful
code.

There are 3 factors at play. Brains, Fluency, and Theory.

If you have good theory you won't spend 100 years trying to figure out things
people already have figured out.

If you have good Fluency you will write like people in that language write.
"Your code is very Pythonic".

If you have brains you may solve a problem no one thought was possible.

I don't have a CS degree, but I'm a "grey beard" as a result I have good
theory. I don't speak Python as a first language, or the language I think in,
so I don't have good fluency. As a certified Genius I have a big brain and
often solve things people didn't think were solvable. So I make up for a lack
of fluency.

~~~
EpicEng
Where does one apply for their genius certification? Perhaps I can slap that
on my resume.

Seriously though, I like the assessment. I've worked with people from all
three camps. Everyone has their pros and cons. I work in the medical space and
end up spending a lot of time with more academic types.

In my experience they haven't been the best "architects", but they have been
great at solving tough problems and writing code that does what it is supposed
to do. I work with them to develop it, and then I take our code and integrate
it in a way that allows us to maintain it more easily over the years.

~~~
drakaal
Mensa is one place. But there are others. Cerebrals Society, Intertel,
Prometheus Society, The Triple Nines.

My role at Microsoft was as Subject Matter Expert. SME's don't write "much
code" but we tend to prove problems are addressable in code and build proof of
concept code.

My current role as CTO I work in python which is not a language I have been
doing for very long. I struggle with Lambda's and List Comprehension, often
opting to use slower constructs that a less experienced developer would use.
But the logic is solid.

I also often am completely with out error handling, and just say. "Well duh,
if you try and stuff HTML in my text field it breaks." or "Why did you use
curly quotes I'm not handling your Unicode".

Part of that is "not knowing" because I don't do it 40 hours a week, and part
of it is that it is cheaper to have other fix my code than it is to tie me up
adding all the error handling and input validation.

------
MojoJolo
This. If you're judging Computer Science by coding, you are making a huge
mistake. Computer Science does not teach you how to code. I remember the only
time my university teach me how to code is during our introductory course.
Computer Programming 1. And that's it. You're on your own in your coding.

Computer Science is more than just coding. It involves graphs, complexity,
math, theories, and much more. Which is a lot. And is hard.

Like math, anyone can do math. But not anyone can be a mathematician. Anyone
can code, but not anyone can be a computer scientist.

~~~
randomsearch
If you do a CS degree that does not involve being taught to code, and code
well, then I would ask for your money back.

------
bakhy
I agree that the distinction needs to be made, although the exact difference
between the two, as many of the comments have already stated well, is hard to
define. A good post.

Nowadays academia is under ever increasing pressure to produce fit-for-work
experts, and seen from such a perspective it really can look pointless. I
personally strongly disagree with such a view. IMO, it should appear to be
pointless! It should broaden your thinking and introduce you to the cutting
edge of the field, not just specialize you for a certain line of work. There
should be programs which will do only such a specialization, but a full-on CS
course is supposed to be more. In the end, how well you will work will depend
on a lot more than just the school, but a good school will help.

The Law of Leaky Abstractions is, perhaps, a good argument for why it is
useful to learn all that theory even though in practice it is rarely needed.
Sometimes, you just need to know what is going on behind the scenes.

P.S. I always have the feeling that the Dunning-Kruger effect is strongly
present in these discussions. The first programmer that I heard claiming that
a degree is useless is also the guy who didn't know what a DB transaction is
for and when he should use it. It's not a huge deal, we fixed the bug, taught
him, and then he knew. But - not knowing such basics, how could he possibly
know what else he is also oblivious about?

We need good schools to teach us that we don't know shit.

------
was_hellbanned
I have a CS degree from a minor state school. It was okay, not as rigorous as
the programs of a few friends who went to much more respected schools, but not
bad either. I happened to have an excellent CS teacher in high school.
Honestly, almost all of the CS I've employed in 15+ years as a professional
programmer, I actually learned in high school.

Personally, I would advise young folks who are already passionate about
programming and technology to either go all-out in a true engineering field
_or_ pursue something that will equip them with a very different skillset. For
example, if you have programming skills but get a degree in business and focus
on accounting, you could easily be the most productive member of your
department. Meanwhile, you'd have the savvy and knowledge to spin up your own
side business doing software consulting or, say, mobile apps.

I would go so far as to say that, assuming you are motivated and already
coding and have a decent math background, a CS program isn't worth it unless
it's from a really, really good school.

------
hetman
The difference between software development and computer science is the
difference between being able to assemble a car from spare parts, and being
able to design the pieces like a new engine or gear box.

The two skill sets don't overlap entirely. However having the latter generally
makes mastering the former somewhat easier.

~~~
walid
The best analogy I've read in this thread so far.

------
minutetominute
"So, please, go do that hour of code if you haven’t already. Who knows? Maybe
you’ll want to become a software developer, but even if you don’t, it’s worth
the effort, and might even be fun!"

I need someone to please explain this last bit to me. He seems to suggest that
it's pretty easy to become a software developer. This idea seems to be pretty
common across hacker news. That all it takes is a little bit of research, and
anyone can get a job as a software developer. Is this true? I've been trying
to change my current career path from engineering to software development, and
I cannot seem to get any conversations started. Does anyone have experience
changing their early career paths and how they went about implementing the
necessary steps?

~~~
sarahallen
I've spent some time teaching people web development (Ruby, Rails, Javascript)
both as a professional trainer and as a volunteer through RailsBridge. I've
seen a few motivated individuals go from non-coder to software developer in
less than 1 year. Certainly you can get paid jobs writing code sooner, but
these folks were doing real development in 6-9 months.

With an engineering background you already have a good foundation in problem-
solving. I would recommend learning one language really well first. I like
Ruby or Python for beginners. Javascript is very practical, but I agree with
the other folks in this thread who compared it to C. It's lack of structure
make it a hard first language. Then find a small open source project to get
involved with. A lot of open source coders will happily mentor you if you put
in the effort to contribute -- you can start by contributing docs and good bug
reports. Get started, see if you like it. It's not easy, but it can be done.
For me, it has always been fun.

By the way, I'm a she :)

~~~
minutetominute
I apologize. I tend to automatically assume most writers are male. It's a
terrible default state.

Anyways, I'm already pretty well versed on that basics of programming. I think
the key, as you pointed out, is to get involved in an open source project to
build up my portfolio. Python is the language I prefer, but I use vb.net to
build the tools I use at work since the .net framework provides a great
interface with the microsoft products corporate office workers are slaves to.
I'll start searching for local open-source contributors.

------
robomartin
Well, it's true. Code is not computer science any more than paint and brushes
are artistic paintings or nuts and bolts mechanical engineering.

People learn what they learn, formally or informally, and then they either
develop a passion for what they learned, or not. Not everyone who studies art
can produce artwork most would enjoy, much less a masterpiece. And, in this
regard, having encyclopedic knowledge in the field isn't a solution.

What I am saying is that it is about the person, not the encyclopedia.
Developing artistry requires knowledge, passion and dedication. Knowledge
alone isn't the entire equation. Knowledge without passion and dedication is
useless, no matter where it comes from. And this might very well be the reason
a lot of CS grads falter.

------
waylandsmithers
| Also most software has advanced features that require you to do things that
use coding skills — setting up mail filters, creating spreadsheet formulas,
even styles in Microsoft Word.

I've worked with many people who, while presumably listing Microsoft Office
skills on their resume, spend time with repetitive tasks in Excel that could
be done in minutes or seconds with a formula and a click-and-drag.

I've found that the hardest part is finding the best way to tell them that
there is an easier way without being condescending or making them feel
foolish. I usually go with "Hey, um, can I show you something?" But ideally
this opens the window to realizing that you can make Excel (and computers in
general) do stuff for you.

------
yason
If you code and develop in it, you're bound to hit computer science whether
officially or informally. Because if you don't, you aren't really coding:
you're just staying at your comfort zone and that's no more coding than
learning to play a dozen songs with piano and just playing those over and over
is not really playing piano.

On the other hand, if your background is top-notch computer science you just
may suck at coding ― which would be just ok except that I suggest that not
many advances in computer science happen unless the dilemmas at hand stem from
practical programming problems, after which they can be explained and modelled
theoretically and theoretical solutions be devised.

------
j2kun
People who claim they'll never use computer science in their job as a
programmer remind me of the people who say they'll never need math after
school.

It reminds me of the old xkcd: you can get by without it, but the fun things
in life are always optional.

~~~
randomdata
From my observations, many seem to dismiss anything related to computer
science that is not cutting edge research. For instance, I once recall reading
a comment downplaying the Linux kernel because it only used simple algorithms
that any first year CS student would learn.

And that may be the case, but that attitude places CS on a pedestal that most
people feel is out of their reach. As such, when they use CS fundamentals in
their day-to-day programming job, they don't really feel like they are using
CS. They're just coding.

Similarly, I think people hold similar attitudes about math. Arithmetic isn't
math. It is what elementary school students learn. Only mathematicians with
chalkboards full of unintelligible symbols dreaming up formulas that the world
has never seen before use math in their job.

------
rbanffy
"[Computer science] is not really about computers -- and it's not about
computers in the same sense that physics is not really about particle
accelerators, and biology is not about microscopes and Petri dishes...and
geometry isn't really about using surveying instruments. Now the reason that
we think computer science is about computers is pretty much the same reason
that the Egyptians thought geometry was about surveying instruments: when some
field is just getting started and you don't really understand it very well,
it's very easy to confuse the essence of what you're doing with the tools that
you use." \-- Hal Abelson

------
atmosx
Do you need a CS degree to become a programmer? Of course not, I don't have
one but I can program.

Does a CS degree make you a better programmer? Most certainly it will! It will
give you an optimal background on which you can build solid knowledge. But you
can't be 100% sure about that either.

Can you learn everything and more than a CS laureate by yourself? Of course
you can, especially today that information (mostly about technology) flows
free online. You can order books from amazon (Knuth anyone?), etc.

As my genius Math professor once said: "When you come to the oral exam
session, I will ask you a question. In 99% of cases, the answer is: it
depends..."

------
joelgrus
computer science != a CS degree

~~~
walid
hahaha that is a whole new can of worms...

In my experience, mentors matter more than the course title. I've had the
privilege of being taught by some of the best teachers and witnessed some of
the worst. When your instructor deals with the course material as the sole
purpose of a student being in class then the important lessons of computer
science become nothing more than an exercise in regurgitation. However I've
had my eyes opened by certain individuals who showed me what mathematics means
in real life, how algorithms fail, why project management is important and how
it's done and even how all coding has a mathematical basis (like SQL and
compiler decisions). Personally my CS appreciation was a byproduct of being in
the presence of these mentors rather than reading a book. They showed me the
essence of the science. Mind you I love the books and still read my university
books sometimes for fun, sometimes to brush up on the science after getting
rusty.

------
antirez
True but:

Code people, should be open to learn theory when needed.

CS people, should be open to understand that writing code is not marginal and
takes a lot of time to master.

Probably more cooperation would be needed.

~~~
walid
I think the distinction is more like medical researchers and practitioners. CS
is more like the research aspect of the craft but once it's done it has to be
applied in practice. Sometimes you don't need to be a doctor when feel you
have a cold and just take a day off and stay in bed, but a nurse can't help
you with cancer. Most people get the common flu and for them you don't have to
see a doctor, but what happens in our profession is that some people think
that all problems are equivalent to the flu.

------
NAFV_P
My father sent me a link to lifehacker, and was surprised to find I really
enjoyed it. I thought it was humourous yet well designed and it explained
loops well.

The example I tried involved moving angry birds and zombies around on the
screen, and it required a bit of thought. It wasn't rocket science, but it
wasn't a walk in the park either. This movement will be successful as long as
the right resources are available.

------
j45
Customers rarely care what we code or computer science in

~~~
PeterWhittaker
I don't know that I've ever been more torn about a comment than this one. I
worked in both "core dev" and professional services development, and have seen
what comes from well-architected software design, the sort of architecture
that only experienced top-line CS graduates (or several-decades-worth-of-
experience autodidacts or engineers) seem capable of producing (IMHO, YMWV)...

...and have seen many, many 1.0's, shelfware, etc.

A CS grad from a top-flight school with excellent experience is worth their
weight in gold, at least on teams of multiple people developing big systems -
you want at least one, they will take care of data design, software
architecture, etc., and likely cause your code to be more robust, more
maintainable, etc.

But motivated college grads (I'm Canadian, not sure what the US term would
be), talented engineers, and autodidacts can crank out code like nobody's
business. I don't know that I'd want to built a multi-year "core services"
library out of it, but PoCs, MVPs, 1.0's, and demoware? Why not? And the top-
flight CS grad might be wasted there.

I'm torn because I care about quality, but really high quality only matters
for the really long-lived system, the health-and-safety-critical system, and
the system that must survive on its own with minimal human intervention and
maintenance.

Were I building a radiation control for healthcare, I would want electrical
engineers and CS grads from top-flight systems. Ditto military avionics.

If I was building apps, apps, apps, servers built atop well-architected OSS
libraries, etc., I'd want code, fast, and I'd balance quality Vs lifetime to
maximize profit, and probably hire less experienced, less well trained devs
who "give good face", understand requirements, and code fast.

The libraries themselves? Good question....

I don't have a conclusion. But j45 is right, customers don't care so much -
but they don't want 3AM bugs, either. It's a trade-off.

~~~
j45
A few observations:

\- Being reasonably kind to your future self without over engineering or over
architecting is the real skill of a talented developer/engineer in my eyes.

\- All software is like hardware, no matter how it's built, it has it's limits
that will likely have to be revisited.

\- Customers not caring about which language/framework something is made in
doesn't mean the code is automatically unkept or made carelessly.

\- Most languages and frameworks are pretty capable. All have their tradeoffs
of what they uniquely provide vs give away. Very few projects will critically
fail or succeed solely from the selection of a particular framework or
language.

\- I'm not sure if you're connecting customers who don't care what language
their system is built in, causing 3 AM bugs. If so:

a) 3 AM bugs are not a cause of any particular language of framework or
language, or the customer not caring about which one, but rather, the
developer.

b) Bugs are a reality on all platforms, and are best insulated against by a
combination of process, policy and strategy that can be reasonably implemented
in any stack.

Ultimately, it's about how the user feels and the value that provided to them
in solving a pain.

Customer value is NOT the same value the developer provides themselves to make
the developer's own life easier and somehow believing that all the build tools
in the world will solve the customer's problem any better, or make a
difference for the end user. It's not as often as it seems.

Most languages and frameworks are capable of delivering delight if the
developer spends time focussing on the user's pain and not just their own
pains in their stack. Looking at how much value HN provides, it's not a
function of it's language, framework, or coding.

Maybe like inter-faith, i'm an inter-platform kind of guy as a polyglot and
see the good everyone can be doing instead of dividing among syntactical
philosophy that is indistinguishable to the users in the end.

------
priya_sri
I had penned my views on this (very similar!) here a while ago : Code - It's
not just it !
[http://priyankasriraghavan.blogspot.in/2013/07/programming-m...](http://priyankasriraghavan.blogspot.in/2013/07/programming-
musings-code-its-not-just-it.html)

------
Codhisattva
What I learned while getting my CS degree:

The physics of microelectronic devices Machine language C Data structures
Sociology Psychology Anthropology Literature Politics and Activism

College is an opportunity to learn. Whether you seize it or waste it is up to
you.

[edit: just want to add that the OP makes a great point]

------
protez
Computer science == models of computing. One of those models is language. We
can run machines without codes, but with feelings and images. We, human
beings, are just complex finite automata with very complex states and meta-
states.

------
tslathrow
I did an undergrad in CS (Columbia) - in retrospect I should only have minored
in CS.

I'm not sure it's worth the workload!

You will have _no_ free time and get reamed in GPA

Very math-heavy and the project based classes were brutal.

~~~
dylandrop
I did undergrad CS @ Columbia as well. Of course you're not going to skate by
as you would in _insert-non-offensive-easy-major-name-here_ , but you learn a
hell of a lot more. It's my personal belief that (especially in technical
fields) you can't learn without putting a lot of hard work into something. But
in doing so, you'll also keep yourself a step ahead of the curve in the job
market. As per the article, plenty of people know how to code, not quite as
many know CS.

Also personally I felt like this is an exceptionally competitive major (as are
sciences in general) but I'm sure that's true for other schools as well. It's
okay to get a B -- you're being compared against other brilliant people and
plenty of people would be lucky to hire you. This is probably the one piece of
knowledge I would have told myself 3 years ago when I started it.

~~~
tslathrow
I completely agree. It was more that I ended up going into finance, so GPA
became a sticking point. It all turned out okay - I just wonder whether
Columbia could make CS less brutal.

------
TazeTSchnitzel
Code ≠ Computer Science, surely? ;)

------
bnolsen
engineering or applied physics are the correct degrees. i've never been
impressed with CS guys. In my time they were washouts from the better degrees.

------
ra3
Ryan Carson is the next Steve Jobs

------
notastartup
I think Dr. Nassim Taleb, author of Fooled By Randomness put it the best. Real
knowledge is gained from tinkering, trial and error. A degree from a
recognized academic institution is largely a social credit that is earned
through memorization and the ability to recall and recite those references.

I studied Economics, so I had to figure out how to code (still at it) by
relying on the internet and experimenting. Doing things that seemed
interesting. I didn't study CS because at the time it seemed impossibly hard,
so instead I focused on learning by reading books, experimenting.

I have friends with computing science degree yet they cannot code or have
shipped software. Ironic that they cannot work as a software developer but
it's the same reason I feel about my Economics degree (not working as an
investment banker as I'd dreamed but thank god). Rather their theoretical
knowledge in computing science degree seemed to limit their true potential to
realize coding involves a different part of the brain then the ones used to
pass final exams.

I often find the computing science questions in job interviews puzzling. How
does the ability to recite an algorithm from the textbook translate into being
able to ship code? How does one learn how to play a concerto by simply reading
a book listing instructions and being asked to recite specific pages? It's my
belief that coding (in terms of shipping software) is a highly organized and
rational form of art. You are writing words but it's strictly limited to what
the creators of the programming language have selected. How you form the
sentences that the computer can understand really comes from trial and error
until you've become familiar with it.

~~~
finnw
> I have friends with computing science degree yet they cannot code or have
> shipped software.

So do I, but CS degrees are _not_ about memorization. At least not in North
America or Europe. For my CS degree, I had to follow the math and deliver
code. Toy code of course, but its a long way from "recalling and reciting
references." If it had been about memorization I would probably have failed.

I also know people who say they got CS degrees through memorization and the
ability to recall and recite references. They are Indian and Chinese. And they
can code (even if they believe their degrees do not help.)

~~~
notastartup
How the hell does this lead to stereotyping an entire race? Just so you know
India and China have produced a large bulk of academics in computing science,
across various educational institutions in North America and Europe. So I find
your statement very arrogant and condescending.

Of course you can't memorize your way through a CS course requiring you to
write code, but my point is exactly that, school doesn't teach you to actually
be able to ship code or write something. It's something one must discover on
own terms.

~~~
finnw
> How the hell does this lead to stereotyping an entire race?

It does not. It is just an anecdote, from three people I know, who were
required to memorize stuff, and found their coding ability did not contribute
much.

> Just so you know India and China have produced a large bulk of academics in
> computing science, across various educational institutions in North America
> and Europe.

Yes, I did.

