Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I have always wondered how much of CS coding knowledge applies to web apps and how necessary it is to take some of the killer math courses offered in university to be able to code web apps proficiently. And if there is that big of a difference between coding and web apps, then shouldn't universities and students be better off learning how to code web apps since they seem to be in dominant usage anyway?

Btw, I am not a technical person, hence the curiosity. Insights would be much appreciated.



> how much of CS coding knowledge applies to web apps

That depends on your web application and what programming problems you need to solve. If you only need to glue together other people's code and components, then not so much. If you need to write your own framework, crunch ratings data for recommendations, custom binary serialize data for your ux layer, or do complexity analysis of some backend algorithms, then a CS major will help you a lot.

> shouldn't universities and students be better off learning how to code web apps since they seem to be in dominant usage

Oh no they're not. The absolute majority of software being produced is for internal corporate use, helping businesses on the inside.

Also, universities do teach web apps, it's just that they're not very complex or interesting problems. HTTP requests go in. HTTP responses go out. You have a framework in between that abstracts this, and there you have it.


>HTTP requests go in. HTTP responses go out.

That is very true for CRUD apps that make up the majority of web apps. And if you need to do something more complex with a web app, like analyzing data, the CS knowledge required is no different than if it was an offline app, i.e., a CS degree would be very helpful.

However, I think that for the majority of programming jobs out there, a full scale CS degree is a bit overkill.

If you're hiring someone to produce CAD drawings, you don't need a full fledged engineer or architect; you can find someone with a certificate from a tech school.

I wonder if eventually programming will eventually go that route. 4 year degrees for Software Engineers, and tech school certs for Software Technicians.


A few weeks ago I was listening to a show on NPR about how to get into programming (I believe one of the founders of Codecademy was a guest) and one of the guests said something that has been running through my head since:

    5-10 years from now, entry/junior-level programming will be blue collar job.


Think back to 1992. 20 years ago. Using the 'web'. Well, Gopher sites, and veronica searches. Then fast forward to 2002. How much changed? How much was new, and how well did the signal hold up to the noise? We went from pure text, which was mostly well-written, to a heavily graphical environment. Pages didn't render so hot but some of the crazier websites were just about to do some really impressive things. Webmail was becoming a cute way to check your mail real quick when you weren't at your regular computer.

Now you're in 2002 and are warping to the present day. Now how much was new? Somewhere in between it got fast and diverse enough to replace television. Browsers got real good at all rendering the same thing. The client side code started getting robust. The noise level is at an all time high. Advertising runs rampant. Fraud is prolific and all sorts of infrastructure is integrated and allows all sorts of use and misuse. Add to this the upcoming significance of mobile computing.

Now with this cadence of the imagination, pole-vault yourself into 2022. It's ten years from now. How is the signal compared to the noise? How is the 'web' doing? How are the programmers that created it? Their upcoming replacements have never known a webless world. Few were trained in college, nor vocational centers, but simply picked the skills up as part of the natural landscape of growing up. Programming has had another 10 years of abstraction. Graphical environments allow programmers to metaphorically build entire program flows the same way a call center employee reads a script. Creativity within these environments is stifled, undesired, expensive. But it pays the bills and keeps the net flowing back at home.

The blue collar programmer of 2022 goes home from their job, fatigued from a day of pointing their fingers at 4 foot glass displays. They feel a relief when they get home to an 8 foot display, where they can run some white collar's program for the remainder of the night. The program is a mix of video games and social networking. It's how a person from 2012 might have felt hanging out at a cheap bar with a few ipads and college buddies. The experience keeps its user distracted and content, the perfectly designed program to contain the 8.3 billion people ever expanding for space and resources.


You can do quite a lot without knowing much official computer science theory. What CS theory does is teach you what's been done already and what's possible. That helps you avoid some classic pitfalls and keeps you from wasting time doing things someone else already solved.


great, in that case wouldn't it be easier to simply pick up a book or two or listen to a few open course lectures to get a referential understanding of avoiding classic pitfalls in CS while focusing hardcore on web languages like Python :) and learning "Python the hard way" :)


To give an example: I'm working on something that is on one level a simple web app. But then, I needed to code what amounted to a concurrent merge sort (merging multiple streams of information (and their histories) that are each ordered but not relative to each other — think Twitter streams, since that's what they were.)

Because I have a degree in computer science, that theory background meant I could quickly recognise the type of problem I was trying to solve and apply standard stuff I had learned to it. Without that theoretical background, I would have developed something that worked, but it would have taken me longer, it wouldn't work so well, and would probably break in unpredictable ways :)

In short, its never just web development.


I think saying that web apps are in "dominant usage" right now is a bit unsubstantiated--there are plenty of jobs that do not involve web apps.

Also, you have to remember that universities are not about preparing you for a career. You do not need 4 years of general education if your only goal is to produce web apps quickly.

Finally, non-trivial web apps--those doing something complicated or needing to scale significantly--do need CS knowledge, and even simple ones doubtlessly benefit from it.


Computer Science is an academic subject, and famously the Computer Scientist Djikstra didn't have a personal computer for a very long time, so you're right that you don't need CS for web apps.

You also don't need to be a surgeon to put in a few stitches (though you will have very nice stitches if you are one).

In other words, if all you can do after a Computer Science course is web apps, ask for you money back. As you alluded to, simple web apps have never been easier, but there are lots of highly interesting and difficult coding problems outside of that niche (think search engines, aircraft software, operating systems and the list goes on).


Thanks for the all the replies below, they clarify quite a bit. Here is another question, how much of the "incredibly difficult" math actually comes in handy and serves real coding purposes other than honing your ability to think logically? Math can be incredibly conceptual at times and as someone who has a psychology background, I know that a person can be not very good at math due to inability to think conceptually, but can be very downright logical on matters that he can understand practically. what do you guys think?


While it depends on what you mean by "incredibly difficult", I would say that if you are doing any work with 3d modelling, it would be necessary to understand basic linear algebra. These concepts will transfer directly - if you are representing your model with points in 3-dimensional space, then displaying those points on a screen is a projection map, and can be described (and quickly calculated) with a matrix. This is a typical example.

Another common example would be a course in number theory. A common topic in number theory is public-key encryption, much more in-depth than is sometimes covered in other courses. In addition, the techniques that you learn in such a course can easily be applied to any "number-crunching" you would need to do. Here is an example:

Problem 1 from Project Euler (http://projecteuler.net/problem=1): Find the sum of all the multiples of 3 or 5 below 1000. A brute-force program for this is simple, but it is much faster if we first notice some patterns: (3 + 6 + 9 + ... + 999) = 3 * (1 + 2 + ... + 333). But then (1 + 2 + ... + 333) = 334333/2 (this would be easily recognized by someone who has taken a number theory class), and so the sum of all of the multiples of 3 below 1000 is 3 333 * 334 / 2. Similarly, for 5, there are 199 multiples, so the sum of all of these is 5 * 199 * 200 / 2. But then we must subtract the multiples of 15, since we double counted them: there are floor(1000/15) = 66, with sum 15 * 66 * 67 / 2. So the answer is (3 * 333 * 334 + 5 * 199 * 200 + 15 * 66 * 67)/2 = 299498.

That was a particularly trivial example - number theory will give you a lot more than some parlor tricks like the above. But this example took a loop through n numbers and reduced it to a single line of simple arithmetic. And for someone who understands number theory, this algorithm is as quick to think of as it is for a typical CS student to think of the brute-force algorithm.

I would also venture that a course or two in "Abstract Algebra" would be both beneficial and accessible to CS majors. This is less immediately practical than linear algebra in the above example, but closer in its style of thought to programming than, say, calculus, topology, or differential equations. The abstraction (which many math majors complain about) would be fairly straight forward for a CS major, I would think.


Thanks. Number theory sounds very interesting. I think I am going to pick up a book or a website on it ... really want to look into it.


I have seen many good programmers who are terrible in math. If someone is bad in math it doesn't mean he is less logical or less intelligent. It all comes down to interest of the student in the subject. For me math was always boring(other than algebra or geometry) as I was unable to understand the reason for learning it. I always used to think why in the hell I am supposed to learn this boring calculas. Where am I going to use it? So, bottom line is that I'm not good at math but I am a decent programmer if not a good one and math is not necessary to be a good programmer but it certainly gives you an edge if you are programming in some specific fields of computer science. For example, computer graphics.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: