• Home
  • Services
  • Clients
  • About
  • Contact

CodingFresh Blog

What should be in a Computer Science Degree?

April 30th, 2008

It’s common knowledge that the number of students choosing to take Computer Science has fallen drastically since the year 2000. Sadly, by trying to spice up Computer Science a lot of university’s are losing touch in what made CS so much fun for many before this news spread.

So why aren’t university’s taking in large numbers of students like they used to? I may have an idea.

Too much choice!

The reason many students aren’t taking Computer Science degrees is simple, they’re taking similar degrees with elements of Computing that they enjoy. Business Information Systems, Software Engineering, Computing, Multimedia Computing, Web Design, Information Technology, the list today is almost endless. At a good university you will rarely come across a spare place in Computer Science but once you start moving your way down the league tables many new university’s aren’t trying to spice up Computer Science, they’re offering fun alternatives. My class consists of less than 15 students, whereas I often attend lectures with hundreds in the room. Many of these students chose their degrees based on the name of the programme and what modules were available to them.

Why should anyone want to take a CS degree ever again? Some choose it for fun and some choose it for the wider career prospects a degree in Computer Science it can bring. Sadly, many have chosen to take other degrees, perhaps taking some CS-related modules along with another degree. If the university’s wish to make Computer Science a viable choice for students again they need to create good programme structures with good modules. These are the key modules I believe ALL university’s should be teaching.

Basic to Advanced Level Mathematics

It’s painful to see that many Computer Science degrees do not cover Mathematics, considering it is potentially the main knowledge area of the entire degree! I did not take Mathematics during Further Education so everything I know from Maths is either pre-16 knowledge or self-taught. The fact that my university do not offer an optional Basic Mathematics module, as well as an Advanced Level Mathematics module is mind-numbing. In fact, I spent most of this year trying to catch up with the rest of my classmates with Mathematics. DIscrete Mathematics is taught at most university’s, but it really isn’t enough! Notice that the top university’s in the world all teach Advanced Mathematics whilst the less-popular ones don’t? If I were a new student, one that has poor knowledge with Maths I would seriously reconsider taking a degree where Maths and Logic are demanded.

Software Engineering

Another no-brainer (yet another one my university will not offer to CS students) is Software Engineering.

A common practice at university’s today is to bundle Software Engineering in its own Degree and teach select modules to those students. This is good because SE is such an expansive subject that is essential in today’s IT industry, but is awful for CS students as many of them get either a poor grounding in it, or none at all! Some industry leaders are even annoyed that there are so few Software Engineering around because of Computer Science students!

Software Engineering is very similar to Computer Science in one aspect, and that is the lying name. Computer Science is not a Science and Software Engineering is not Engineering. Ever notice that no other Science has the word Science stuck to the end of it? Back to the point, CS students should also have to learn about Software Engineering, because they’re both going to be the ones writing the software.

Methodologies in Software and Project Management should definitely be taught to students, as these methodologies will become the solid ground on which group and individual work is built upon, within university and business. The innards of Applications and Programming Tools are also important knowledge, as these students will need to learn to create, not use. There is really no end to what should be taught to students.

Source Control is the rock that Software Engineering is built on. It’s a subject that, believe it or not, many university’s won’t even teach to students! Subversion and CVS are just ’some programs’ to some people, whilst others have found these buzzwords on the Internet or in a book somewhere and have become gob-smacked at how completely essential they are to everything. Just the general idea of source and version control is utter brilliance, and eventually students learn of it after collective days of wasted time.

Computer Systems Architecture

Ugh, Computer Systems Architecture is one of those subjects that is extremely important, but a complete nightmare to software-oriented students. Still, it is worth its weight in Gold once you understand key principles behind it. My university runs a good CSA module for CS students and whilst it has a reputation for being ‘challenging‘ it’s the one module I’ve learnt anything from this year, even after previously getting a merit in a previous HE Computer Systems course.

Past Networking and Operating Systems, as well as Server Administration this is the only time a student will touch hardware past building a powerful gaming rig, so it is a good idea to cram as much as you possibly can into this subject. Assembly Language Programming, Processors, Memory, I/O, Pipelining, RISC/CISC, Multiprocessing, it all needs to be taught in as much detail as can be crammed in.

Hardcore Programming

In case you may have noticed I do not like my university’s CS programme.

Programming is an important part of Computer Science, yet many university’s teach their CS first-year students at an extremely low level, mostly to accommodate students taking the more fun degrees who do not need to learn to program complex tools.

It may be a silly thing to say, but CS students are spending too long in lecture theatres! What students need is practice! Believe it or not I spent a collective two hours this year programming in Java for my Introduction to Program Development course, and I’ve passed the course with flying colours. If I remember rightly one of my final tasks this year was to create a program that used a switch statement…

Programming should be taught like a job. An hour-long lecture per week, topped off with hours in an office-based environment creating software. No creating stupid crap that no one will ever use. Get the CS students creating things that are challenging, and that they believe are good programs. Students should be able to work 24 hours a day if they wish! Allow students to set a sizeable goal, and based on their progress (not necessarily a working application) grade them on how they’ve handled themselves over the year. If a student wishes to create a media player within a small group then let them! Give them small lab lectures to handle difficult areas, but other than that programming should be taught in a programming environment, and that is not a classroom.

On top of this, students should learn as much as possible about programming languages themselves! Given a select problem a student should be able to pick the strongest language for the task, then get to work creating it.

Once the students are in their final years at university it would be great to assign a few to the many Open Source projects out there. Open Source software is extremely important in today’s online experience, with many popular scripts sporting the Open slogan. For students it would be an incredible learning experience, and for the university it would be the best kind of advertising you could get. Imagine an entire class spending a year to develop an open source piece of software that could benefit thousands.

Web Design/Development

Web Design and Development is pitiful at university’s today. The quality of the lectures I’ve heard at almost five different institutions has been similar, in the sense that every single one of them didn’t have a clue. Here are a few famous quotes that’ll never leave my nightmares.

“When building a web page tables are essential. You’ll be very hard-pressed to make one without them.”

“There are about a million web pages online today!” (2007)

“Eventually, websites will be written by hand using scripts, instead of using graphics programs like Paint Shop Pro.”

I’m not kidding. Now, imagine how much money some students waste when they take Web Design degrees!

Web Design and Development should be taught from basics, and what’s more basic than a Text Editor. From there give students a quick lesson in Photoshop and let them loose on a managed Web Server! Teach them all about accessibility, usability and standards-compliant code, then give them a choice of what server-side scripting languages they can use (Ruby on Rails, ASP.NET, Python, PHP, Perl, etc).

If anything a Web Design and Development class could be a relaxing course for a CS major. Instead of writing programs and learning about theory all day students could be let loose on the Internet with a good list of the Web Designers favourite websites, like SitePoint and A List Apart. It need not be an intensive course, because based on what many learn throughout three to four years at university a good grade in this module could prove invaluable.

Part-Time Recruitment!

That’s right! As an optional module students should have the ability to work at a software firm, working on and creating software.

I do not like the typical university approach of sandwich-courses. A sandwich course takes another year where you’ll spend your penultimate year working in industry. Whilst in theory this is good and is known to help many students I’ve known many students come back to find themselves completely out of touch with their academic side, some even failing their final year because of it.

All it takes is a good relationship with select firms and a student can have the ability to work at a software firm outside of university. Not only would they get to earn a bit of money and gain some extra experience a student will get to work alongside some fantastic developers. Simply promoting a ‘free job with your degree’ would have students signing up in no time!

Security

I actually cannot believe how little emphasis is put into security, as well as networking and server administration. Attacks on the web and in large corporations have become commonplace and happen a lot of the time because of vulnerable software. It’s important for students to understand the Software Life Cycle, but it’s probably even more important to show them where security comes into it.

Security is something that rarely comes into a CS education, even though students are taught about it, almost as an afterthought. Security should be taught as both a generalised subject and in every other module involving programming. If students come out of university with an awareness of best practices in security then many areas of IT will benefit.

It appears that a massive, automated SQL injection attack has wrecked havoc across thousands of sites on the Internet. With the right knowledge issues like this could’ve been avoided.

Artificial Intelligence

Artificial Intelligence is a refreshing course for Computer Science students, because it allows them to learn more about many different subjects that CS students would never usually touch. Through learning AI I have learnt from history, psychology, biology, physiology and more!

AI encapsulates so many subjects into its own key areas, like Knowledge Representation, Agents and Searching, and it is a subject that can teach you so much about Computer Science in general, as well as give you a grounding in related subjects.

That being said, some university’s don’t run their AI courses very well, with a lot of it spreading into either logic or programming. All the fun aspects I found with AI were from self-taught research unrelated to my course. I believe AI should be run as a second-year course, allowing students to get a good grounding in Mathematics first before logic games are applied. AI in the first year is often far too basic, and it requires a lot of theoretical knowledge that first-year students aren’t prepared for.

AI should also be tied in with Programming, allowing students to program their own intelligent applications. Perhaps even creating a base program in which students could compete with their skills. I can imagine a fighting game with self-written AI moves would be a fantastic project for the class to work on.

Data Structures & Algorithms

Data Structures & Algorithms is probably the main subject in Computer Science, and one that is rarely ignored by any university. In fact, any good university would have students studying it in year one onwards.

This subject is one that students find it very hard to grasp, especially those who go to university’s that don’t provide much in the way of Mathematics. A large handful of my friends dropped out of Computer Science in their second years solely because they could not pass their Algorithms course, having no real prior knowledge in Mathematics bar basic Algebra and some Discrete Mathematics knowledge.

These problems do matter in Software Engineering, and they need to be understood! Students need to be given the correct grounding in these subjects, then let loose to learn as much as they possibly can on the subject. All students should have to attend 2 lectures and a lab session per week, so students can learn this subject sooner rather than later. I know this contradicts my previous statement that students spend too long in lectures, well this is where this time should be spent! I don’t want to sit in a lecture and be told how to program, but I do want to be extensively lectured on things like this!

That being said, there is a book on the subject that every student should be recommended to read, and that is Introduction to Algorithms by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein (Amazon US Page). Whilst I still struggle with a lot of the content in that book I strongly recommend you all read it, especially if you’re a CS student. I currently use it as my end goal in my quest to learn Maths!

Human Computer Interaction

HCI is a very important subject today in the design and development world. It is also one of the more forgotten subjects in a CS curriculum. Just by looking at your average desktop application (MS Office) you come across thousands of metaphors that many would just overlook! It’s almost like a documentary based on your favourite programs!

Much like AI, HCI is a multi-disciplinary field that focuses on the users of technology and how they link together with computers. Programming simply does not offer this kind of insight, so university’s must all start to teach it (again, mine doesn’t allow CS students to take it).

Technology is changing at a frantic pace, as businesses and industries attempt to take market share. With ever-changing technology there comes new research in many field, especially HCI. Over the past ten years our knowledge of HCI has advanced almost as fast as the technology we partially study.

Human Computer Interaction is one of my favourite subjects. It makes you open your eyes as a developer looking into a designers world. As a strong theoretical subject there is no sound right answer to anything, allowing students to take their first steps into research. Taught as a first-year subject, students could benefit from learning to find sources, perform your own analysis, and writing reports that document a good understanding of a subject.

I highly recommend the book Human-Computer Interaction by Jenny Preece. It should be enough to get you through the fundamentals, as well as reviving your most primal interests in Computers.

Compiler Design

Compiler Design is something I love to talk about with some of my lecturers. It’s definitely a benchmark to where I want my skills in programming to lead me, and it would be great to see all undergraduates tackling things like this. It’s an area that is taught to many at leading university’s around the world, but a lot of students at the thousands of other university’s never get to touch this subject, and that’s a shame really. There are many students that want to push their programming abilities beyond what they are, but feel forced down by the set curriculum. Only by raising the bar can students really reach their potential.

Compiler Design may not necessarily help students with whatever job they wish to take on once they graduate, but the knowledge is essential to a programmer if they wish to remain above the cut. If a student could be safe in the knowledge that what they are being taught could give them a secure job in a company where programming will not be outsourced (or removed via any other rumour) then they’d be grateful.

Business, Economics & Law

A lot of university’s are starting to take these subjects on now, but a lot of the time not in as much depth as we’d hope.

Simply put, these subjects are essential for any Computer Science student. Why? Isn’t it obvious?! These students are going to work in BUSINESS! They will join companies or form their own, and these companies will fight it out for sales. Knowledge of Business aspects, especially dealing with E-Business and E-Commerce are essential. Sales and Marketing knowledge is also great for any student that wishes to get involved in a large company. Economics are under the same roof, as businesses will value a student that is geared for the real world (whatever that is) over a student that has passed a few tests.

Law is a very intense subject, far more intense than Computer Science ever will be. All this talk about software engineers needing to be treated like professional workers (Doctors, Lawyers, etc) is utter nonsense. The IT industry is very important, but if Software Engineers wish to be treated like professionals they have to earn their trade. Give students a crash course in Law geared towards technology and business by loading them up with International Law, then get them examining hundreds of cases from large firms around the world. The Internet allows people to get up to some sketchy things, so give students the knowledge to know what is right and what is wrong when developing tools.

Also, Law would help students learn about the joy of reading books. The difference between Law students and CS students is that Law students will read a hundred-times more than a CS student, even though by reading a couple of books anyone could pass their first year in Computer Science.

Computer Graphics

Computer Graphics is a very exciting subject today, and with the sudden flux of Multimedia Computing courses popping up I’m sure it would grab the attention of those wishing to make entertaining things from their degree.

Some of the subjects within this subset of Computer Science are relatively unknown to your average CS student, but are worth their weight in gold as far as job prospects go. With digital video and online publishing going through a mini-revolution of its own the demand for animators will most likely sky-rocket. Also, what could be more fun than a project to create a 30-second cartoon of your choice? I’ve seen some design students create amazing models and program them to be manipulated in some very realistic ways before. Why are CS students missing out on this?!

Graphics Programming would be a great subject to include with this, teaching students how to program any models they create and to manipulate and write libraries to create animations, games, etc.

As far as resources go the Internet is one of the best places you can go to get practical help. There are thousands of communities out there that are willing to help and provide the honest critique that you need to succeed.

Databases

Oracle databases are fantastic to use, and when you know SQL well you can control data extremely well. In fact, learning SQL through Oracle has made me almost feel sorry for the average Web Developer. Whilst the SQL used is mostly the same in both online guides rarely ever touch certain areas of Database Management and Development in MySQL. It’s reputation as a simple free database stops normal users from becoming power users.

That being said, users should learn how to take care of a Database. SQL should come fairly easy, and users should be able to make whatever changes they require to a database within a few weeks. Database Management techniques give you a somewhat warming feeling about the ‘grunt’ work that is required in many industries, like backing up.

What should also be covered is the many different types of database there are, and have them be implemented into users’ programs.

Optimisation

A module to link Data Structures, Mathematics and Programming together would be fantastic for students, as from what I hear a lot of graduates chuck away a lot of the theoretical knowledge they’ve acquired once they enter a job. If university’s want to load student minds with theory then they should at least teach them exactly where it should be used in a practical way.

That’s it for now!

…And there you have it! There are 15 subjects that CS should teach, and that’s only the beginning of what these bright young minds of tomorrow should know. With the state that Computer Science is in today is it any wonder that university’s around the western world are releasing CS graduates into the wild, only to be smashed into your average coding job where they’ll never be appreciated for what they are, potentially one of the few industries that can drag the world from recession, or even worse, a depression.

Posted in Education |

9 Responses to “What should be in a Computer Science Degree?”

  1. hamada Says:
    July 13th, 2008 at 8:28 am

    rant:
    I was gutted by my first year subjects once I started my cs degree, they really took the wind out of my sails. After finishing high school expecting to go forwards, because of my maths mark I got lumped in with the idiots in a filler course, because the alternative was being a genius or doing the hardest math in high school, which I saw as “not being useful to what I wanted to do” two years ahead of time (if I had taken hardest math in high school and done extremely poorly they would’ve put me ahead it turned out). Seeing as university courses are like tech trees in RTS games, I needed to do what amounted to math101 to do anything relevant or interesting. Since I am like a stubborn mule in that I point blank refuse to do things I hate, I failed even that math101 class due to attendance (thanks for the warning beforehand). So lets see, that set me back about a year and a half by now, but boy was I learning useful things outside of uni (internet is awesome)! Now these off-by-half-a-year courses were at night, so anything I wanted to do outside of uni was off limits when I finally got stuck into doing uni stuff (punch to the guts #2). I even had time to do French, then Japanese by the time I could do all 2nd year subjects in a semester. Before halfway through year 4, I got depressed because of the “what’s the point” argument. Skipped going to classes, then going to exams, then going outside. Took the rest of the year off but thankfully avoided getting to see the inside of a funny farm (I was just being a recluse wahhh). Year 5, I turned into Mr Jaded Indifferent, and repeated my year 4 stuff, passed my courses, etc. Eventually I graduated a 3 year course in 6 years with a GPA of “avert your eyes”, and I even learned some INTERESTING THINGS.

    Those INTERESTING THINGS were what I went to uni for, not to learn about how addition is an operation that can be applied to a set of numbers and having ‘useless’ maths101 shit burned into my mind. Just so you don’t think I’m an anti-maths zealot, I absolutely loved to bits my second year maths courses that involved cryptography and how finite state machines are turned into real life electronics. (These courses were both ‘math’ units, but in reality you could say they were math/comp and math/elec)

    Of all the courses that I ended up doing, I specifically remember that the 1st year maths courses didn’t have any feedback sheets, and the only other one was my 3rd year level comp graphics course, because the teacher was so approachable people could just talk about whatever usually during tutorials.

    My first computing subject at uni was learning about/making vb forms stuff and connecting it to a database, except like in primary school where you are given a sheet of paper where you do x, and then the prac teacher marks down that you have done x.

    By the way, I noticed you said “optimisation”. It’s actually a subject, although it doesn’t mean what you’d think it does (guess how I know). Its formal name is Linear Programming (en.wikipedia.org/wiki/Linear_programming). It turns out it was less of a 300 level COMP UNIT and more of a 300 level MATH UNIT, complete with having to buy/use MATLAB to do everything by plugging in numbers like it was that 100 level comp subject instead of having to program our own solution and learning about it that way, and the rest of the time was spent plugging through theory after theory.

    If I was to run a university, the only time I would require prerequisite courses to be completed would be if someone wanted a degree. none of this 101->102->201->202 crap. Let them do 300 level courses in year one. I say this because I had perfect opportunity to do a databases unit (which I was interested in outside of uni at the time), that could fit in my schedule, but I hadn’t done a prerequisite 300 level unit.

    At the end of it, my cs head of department was pretty cool though when I got to know him a bit, because he had that “you will be in a job next year” mentality and he arranged for different industry people to drop by and talk at the various 300-level courses. He taught us cs students both how to fend for ourselves by being self reliant, and why it’s a good idea to work with others.
    (e.g for our first low level comp architecture we got given the required assembly language docs, the assignment, and he told us to either team up or suffer “because real life outside university is hard”, and so we managed to make a team out the entire class, documented and explained code to each other as we went along, and after we finished the assignment early we were randomly picked on to explain what everything did to another cs lecturer)

    end rant

  2. admin Says:
    July 13th, 2008 at 10:19 am

    One of the most relevant rants I’ve heard in a while Hamada.

    A little bit of back-story for me: Not that long ago I was taking a two year vocational higher-education course on Computing that’d amount to two years at a university and would allow me to transfer to the final year of a real degree. Sadly, I had an accident and broke both feet and my left wrist, meaning that I had to drop out and waste an obscene amount of money to retake. Instead I decided to start at the beginning and fill any gaps in my knowledge.

    Computer Science at my current university is deemed a second-class degree in many aspects because it has few students (not enough money). It’s a ‘Java School’ and teaches little to no Math for a university that allegedly runs a very good Mathematics degree and already runs the courses for other degree programmes. In many ways I’ve come to your point of “what’s the point” after my accident, realising that no one would take me on half-way through a course and that I’d have to either retake or start fresh. Regardless of my poor module choices I am taking a similar route to you, finding out what I should really be learning and getting some experience alongside my degree. At least that way I can find new and exciting ways to link the knowledge I gain from later courses. Before, my lack of Maths was a real nuisance and affected my progress, but now that I’m working through the kind of stuff that I’ve researched and decided will help me I’m becoming more confident.

    I never knew that ‘Optimisation’ was included in some degree choices, although your course seemed to teach it differently than I would’ve imagined it. When I mentioned Optimisation I meant in a pure CS context, meaning a subject that’ll teach students how to increase efficiency by improving code and algorithms, perhaps even going as far as seeing how to optimise for different architectures. Your Optimisation course sounds very interesting though and I’ll be sure to look into it. What university did you attend?

    Your ideas on how a CS course should be run are pretty good, and I definitely agree that students should be allowed to learn what they want to learn, within reason. In my opinion it’s a sign of the times we’re all facing as CS students. The average university today is starting to lose track of purist Computer Science with silly modules being included to up the admissions. A lot of people will read this post and think that I stand for removing other ‘pure’ subjects for a core set of non-CS modules like “Business, Economics & Law” and “Web Design/Development”. My only reason for including these were to get with the times and try to teach these subjects with some kind of relevance at university. In an ideal world a CS student would never have to play with a PHP file to make something trivial like a shopping cart script, but along with the other thousands taking dumbed-down CS degrees we have to. I’d at least want subjects like these taught with more intensity and included in with other subjects. I suggested hardcore programming to get students ready for work, and I believe that a few weeks of XHTML/CSS/PHP/Perl/ASP.NET/Haskell will set a CS student straight, instead of taking an entire semester out to have lecturers teach you that “tables are the only way you’ll create a web page”.

    It’s not as much a gripe with the subjects, but a blatant disagreement with the way that CS is veering towards the lesser-popular degree choice in an IT/CS department. A lot of students won’t take CS because it’s full of hard Maths and Physics, seeing as they can take a ‘Business Computing’ course and end up with an equivalent degree. My module choices are just ideas with the intent of making CS the ‘main’ IT related degree once again. If something isn’t done soon to motivate students into taking CS then we could lose the subject’s integrity altogether.

  3. hamada Says:
    July 13th, 2008 at 3:44 pm

    >What university did you attend?
    A university in Sydney, Australia. I wouldn’t want to discredit them directly :)

    The gist of LinProg is to determine maxima, minima, given some conditions. It’s also called Operations Research, and in that context they use linprog to max profits, min costs, etc.

  4. Vidar Hokstad Says:
    July 18th, 2008 at 5:20 pm

    You lost me the moment you wrote “It’s painful to see that many Computer Science degrees do not cover Mathematics, considering it is potentially the main knowledge area of the entire degree!”.

    Sorry, but it is _not_. You can understand practically all of computer science with high school level maths, with a couple of minor caveats: Some researchers have a fetish for mathematical notation where plain English would do just as well and communicate their ideas better to a wider audience. And there are minor areas of computer science where some maths and/or statistics is unavoidable.

    I’ve programmed since I was 5 (28 years…), and a lot of what I enjoy doing involves reading research papers to catch up with current state of the art. I’ve maybe once or twice been limited by the lack of maths courses I took. That includes subjects people often like to sprinkle with maths, such as evolutionary computing (GP, GA), neural networks, optical character recognition, parser theory etc.

    I’m not suggesting people shouldn’t take maths if they enjoy it, but I’m sick of people that put people off studying CS by making maths sound like it’s required to get anywhere in CS or software engineering - it isn’t in either.

  5. Mike B Says:
    July 19th, 2008 at 11:23 am

    Thank you for the comment Vidar, and especially thank you for disagreeing with me. It’s nice to have someone with a differing opinion in any Blog post.

    The problem with saying that all you need is high school maths is that it’s suggesting that all schools teach up to 18. As I’m sure you’ll know as a resident of London in England we leave school at 16, the last time I was taught formal Mathematics. Depending on where you want to go in CS you’ll need some sort of Mathematics, regardless of what you’re actually studying.

    I think one of the joys and pains of Computer Science is that even though the content is reasonably similar, different universities will teach CS in different ways. My current university teaches concepts with little Mathematical notation apart from basic Discrete Mathematics, whilst another university will teach it using heavy Maths.

    I noticed that your focus in your third paragraph shifted to programming. As far as programming is concerned you probably do not need heavy Maths to succeed, but in many ways a ‘pure’ CS degree distances itself away from the more physical subject of programming to concentrate on the theory. Different strokes for different folks I guess.

    (I assume it’s safe to say that you’re the same person who recently commented on this story from Reddit as well?)

    It’s safe to say that a large majority of CS degrees will focus on Maths to teach fundamental CS knowledge, and this can be either a good thing or a bad thing. Much like you I’ve always had a passion for getting stuck into the actual work instead of the theory that doesn’t seem to push you in the workplace, but I’ve come to believe that both are needed in a complicated fashion. Would you agree if I were to say that with a strong understanding of Maths CS would be easier to pick up?

    I’d love to agree with you but for many aspects of Computer Science that do not involve programming I would say that Mathematics is essential. Perhaps it’s just me, but I am definitely starting to feel the pinch from a lack of formal education in Maths.

  6. jonas cold Says:
    July 28th, 2008 at 1:29 pm

    i dislike the idea of having hardcore maths in the CS curriculum. where i live, the deepth of maths taught is so demanding that many quit their CS degrees because of it.

    a friend that studied in the UK says the maths taught there in a CS course is similar to what i did in high school.

    teaching web design is dumb too. let me guess you are a web site dev/designer?

  7. Mike B Says:
    July 28th, 2008 at 1:56 pm

    Thank you for the comment Jonas.

    Regardless of whether you think it is dumb it’s what thousands of standard textbooks use. It’s taken me a while to get my head around but if you know Maths then you will find other aspects of Computer Science a lot easier. I’ve managed pretty well so far, but I’ve managed to hit a number of roadblocks that have stopped me from reading academic papers or managing to fully understand books like the popular CLRS book, Introduction to Algorithms. Perhaps it’s because I’m stupid, who knows? All I know is that for students that aren’t gifted that need all the help they can get it’s a lot easier to know what everyone else uses, and that is Maths.

    One of the main differences between the UK and the US is the school leaving age (16), so in order to get ready to university we go to college for two years to get A Levels. This system is broken in itself and you will find students with no A Level in Maths taking Computer Science. Another problem is that being a smaller country we have fewer higher education institutions, and in those that we do have there is a social class-divide of sorts. If you’re unfortunate to go to a new university then you’d better be prepared for a lack of resources and a curriculum that boosts employability and practical skills over theoretical knowledge. In many ways this is blatantly wrong, as even subjects like Programming are not Computer Science! Many top universities won’t even teach a ‘pure’ CS degree and will favour practical skills.

    Teaching Web Design/Development in a CS degree is dumb, but so are the majority of CS programmes in the UK. At my university because the CS students make up about 5-10% of classes our needs are shifted to those who have little to no experience, bringing us further back from reaching our potential. I can’t help but feel it’s the same in a lot of other universities.

    The reason I opted in for teaching Web Design/Development is because practical skills are required, and where will a lot of jobs be going in the future if the dot-com bubble decides to burst again? The Internet. If you can get a class that can program extremely well then what’s the harm in giving them a couple of weeks practice in implementing what they’ve learnt onto the web? It’s a fantastic way of getting first-year students to research using the Internet (which they’ll do anyway) and to learn how to understand basic concepts in a short amount of time. My intentions aren’t to create a load of Web Designers/Developers, but to give students a task and get them to complete it within two weeks. You may think that requires making a couple of websites, but I’d make it out to be a learning exercise to understand:

    - Documentation Standards (W3C)
    - A shift from programming to scripting languages, as well as implementations of languages using web frameworks (Haskell)
    - A fun introduction to open source development.

    In my opinion it’s stupid to not give students at least some form of direction towards the Internet. As a lecturer or professor I would want to churn out some fantastic graduates that have strong knowledge of Computer Science, yet appreciate the aspect of real work. There are so many Computer Science students that lack that notion and will clearly struggle as they apply for managerial roles straight after leaving university.

  8. jonas Says:
    July 29th, 2008 at 8:22 pm

    I understand your point fully, but i must say i don’t agree to the same extent.

    IMHO set theory and logic are much more important to CS than maths and those are taught very early in school. Those subjects, and specially notation, should be reviewed and hardened during higher education and in a CS degree because they are essential for reading nearly all of the important texts that aren’t written in straight English.

    It appears to me that most CS students are being taught to be code monkeys, web developers or unix administrators with loads of Math knowledge :)

    Recently a girl, in one of the most regarded higher learning institutions here, told me she wouldn’t apply for a C++ job because her school mostly taught her Java. That’s the weirdest things I could ‘ve heard from someone doing a 5 year CS degree.

    In a recent job i had contact with loads of people coming from “good” univs. and few could do a decent job designing, profiling, programming or debugging a simple applications but they all had tremendous Math skills.

    If SQL + java ever goes out of fashion they’ll be stuck doing maintenance jobs forever, or maybe as maths teachers :)

  9. Mike B Says:
    July 29th, 2008 at 8:49 pm

    I guess it depends on how you’re taught Set Theory and Logic, as I was taught it at my university as part of our Analytical Modelling class in the first year, yet I struggle with most Mathematical notation. A lot of the top-class universities hold Maths in high regard, and if they’re the ones churning out the academic papers then it seems that I must know Maths.

    At the heart of it, there is no real ‘curriculum’ for Computer Science, and every governing body for the IT industry gives a wide range of subjects either way. A lot of the time it’s purely a business decision to get more students to fork out cash for poorer programme structures.

    I go to one of these infamous ‘Java Schools’, where we’re only really taught Java as a practical programming language. I once opted to use C++ for a subject (with no knowledge of it) and my lecturer almost flipped. Admittedly my degree is only a three year degree, but knowledge of several programming languages is essential if you want students to become programmers. Also, students must be pushed into writing programs constantly to better themselves.

    I know some students at good universities that are fantastic programmers and phenomenal mathematicians, yet their lack of knowledge of software engineering and project management means that they end up in entry-level jobs either way; exactly the same as my university that has a far inferior CS programme.

    The reason I am taking to studying many of these subjects myself is because my university won’t teach them to me. I’m taking this summer off (apart from work) to learn as much as I can about Maths in the hope that it’ll make me a better Computer Scientist. It may count for nothing, but at least I’ve tried. I fear that if I don’t do something then I’ll be fantastic at Java and SQL (as you’ve said; also two main practical subjects on my course) and be left with nowhere to go when Java eventually dies out. I give it a couple of years before other languages take control for certain applications.

    Either way, thank you for your comments, and based from what you’ve written I will look further into Set Theory and Logic, perhaps even write a couple of posts about my progress with them.

Leave a Reply

  • Pages

    • About
  • Categories

    • Business (19)
    • Design (10)
    • Development (16)
    • Education (9)
    • Entertainment (4)
    • SEO (5)
    • Technology (19)
    • Web (22)
  • Related Web Pages

  • Archives

    • August 2008
    • July 2008
    • June 2008
    • May 2008
    • April 2008

CodingFresh Blog is proudly powered by WordPress
Entries (RSS) and Comments (RSS).