Do all the things like ++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatarSign Up
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple APILearn More
Search - "wk92"
I think CS education is getting weaker and weaker every year.
Since they released CS GO, CS seems to be overtaken by little cry kiddies who put out insults like an AK on speed.
I wish CS education was like when CS 1.6 came out.
Those were great years to learn gungames on The Simpsons maps and you were actually able to land headshots by skill and not just utter luck.19
Teach students to write secure code.
For example, if you teach SQL, then you should also teach SQL injection10
Three years into studying software engineering and three quarters of my class have no idea what git is.
But by gosh, can we code the shit out of a tic tac toe game.21
Another one, teach secure programming for fucks sake! This always happened at my study:
Me: so you're teaching the students doing mysql queries with php, why not teach them PDO/prepared statements by default? Then they'll know how to securely run queries from the start!
Teachers: nah, we just want to go with the basics for now!
Me: why not teach the students hashing through secure algorithms instead of always using md5?
Teacher: nah, we just want to make sure they know the basics :)
For fucks fucking sake, take your fucking responsibilities.31
Get rid of required minimal lines of code for project assignments.
Replace the teachers with no real world experience with part-time workers that are still active in IT.
I had this last year in my final year of vocational education and it was amazing, I had two teachers running their business two days a week and teaching us everything on the three remaining days.
I learnt about oop without dogs and cats, I learnt to extract information from invoices to be able to create an invoicing system without being misled by customers, and much more.
Second thing would also be something we did in my previous education. It was called "learning productively".
Basically, companies would give a project to the school and students could pick one to do for a few months. You had to have meetings with the customer, you had to give presentations and it wasn't another fucking calculator.
I've had the pleasure of working with a big corporation like this and learnt a ton in my first year.
These were extremely valuable, I think I'd still be a piece of shit developer without any knowledge on how to actually develop a full system and how to manage a project as a dev.
We're not a family of devs. So the situation may seem weird to them.
My sister saw me doing the rubber duck debugging and venting my programming frustration with an innocent little duck. Eye-to-eye. And now, she thinks i'm in need of serious help.11
It is bothersome that a college degree is more important than demonstrable skills.
"You're so smart! Where'd you go to college?"
Just wanted to show you all a completely relevant image I took at Living Computer Museum in Seattle.35
Understand some students might have better solutions. Not accepting better solutions proves you're a bad teacher.3
About 95% of what I know of CS is self taught.
This shouldn't be happening, or at least not this much.8
In database course we should be thaught "database", not "MySQL"
In object-oriented programming course we should be thaught "object-oriented programming", not "Java"
And so on and so forth8
Put some kind of course into the studies which makes students get in touch with open source technology.
May it be arduino's, open source languages, frameworks, whatever.
But especially teach them what open source stands for. I mean we already teach them how to work with closed source technology explicitly so let's show them the other side as well!12
GROW SOME FUCKING BALLS AND TAKE RESPONSIBILITY YOU FUCKWIT!
I can't even count how many times I've heard people excuse themselves with sentences like:
"It's not my fault I only got a C, our teacher was shit"
"How can I finish this assignment when the teacher haven't learned me this?"
"I'll be late to work because my dick was stuck in the sink"
(This is a real one I've experienced myself. A teacher said this last week)
"I wasn't able to put up your material for your assignment before now because we're busy with exams" - The day before the assignment was due. Gj.
"He doesn't deserve to get fired, it's not his not at fault for being incompetent"
Then who the fuck is? The government? Your neighbor? My dog? A stray dog?
STFU! I'm so fucking tired of all these excuses! Grow some hair and take responsibility.
The only thing you achieve by not doing so is making everyone else drown in your disgusting vomit your constantly letting out of your mouth.8
Everyone should start with C rather than java/C#/python (or alike). Much easier to move from C to java than the opposite42
Stop teaching java on a fucking notepad.
Also, since I am from India, start teaching and putting more emphasis on python. Also not to mention git without which you cant live.
If not in schools, these should be made compulsory for CS grads in universities.5
1. No more coding on paper! Why can some already write essays on laptops but programmers are stuck with "analog"?
2. No vendor lock-ins! Teach free, cross-platform development, not VB.NET.
3. No more professors stuck in the eighties! If all you know is 6800 assembly, GTFO. I heard NASA was hiring...
4. Enforce code style consistency, proper documentation and even VCS for larger projects
5. Algorithms -> scripting -> programming. Don't quickly explain the basics, then throw students straight into Java.10
I've found sites like Udemy/Khanacademy/Codecademy/Brilliant/Edx to be very useful — possibly more useful than expensive education.
But they still need:
1. Better correction/update mechanisms. Human teachers make mistakes and material gets outdated, and while online teachers are rectified faster than classroom teachers, the procedure is still not optimal. Knowledge should be a bit more like a verified wiki.
2. Some have great interactive coding environments, some have great videos, some have awesome texts, some have helpful communities. None has it all. In the end, I don't want to learn a new language by writing code in my browser. It could all be integrated/synced to the point where IDEs have plugins which are synced to online videos, with tests and exercises built in, up to a social network where you could send snippets for review and add reviews to other people's code.
3. Accreditation. Some platforms offer this against payment, but I think those platforms often feel very old school (pun intended), with fixed schedules, marks and enrollments. Self paced is a must.
4. Depth is important. Current online courses are often a bit introductory. We need more advanced courses about algorithms, theoretical computer science, code design, relational algebra, category theory, etc. I get that it's about supply/demand, but we will eventually need to have those topics covered.
I do believe that for CS, full online education will eventually win from the classroom — it's still in its infancy, but has more potential to grow into correct, modern education.10
Introduce a subject called "proper use of search engines" and make every kid attend it regularly, just like gym classes.5
Let the student use their own laptops. Even buy them one instead of having computers on site that no one uses for coding but only for some multiple choice tests and to browse Facebook.
Teach them 10 finger typing. (Don't be too strict and allow for personal preferences.)
Teach them text navigation and editing shortcuts. They should be able to scroll per page, jump to the beginning or end of the line or jump word by word. (I am not talking vi bindings or emacs magic.) And no, key repeat is an antifeature.
Teach them VCS before their first group assignment. Let's be honest, VCS means git nowadays. Yet teach them git != GitHub.
Teach git through the command line. They are allowed to use a gui once they aren't afraid to resolve a merge conflict or to rebase their feature branch against master. Just committing and pushing is not enough.
Teach them test-driven development ASAP. You can even give them assignments with a codebase of failing tests and their job is to make them pass in the beginning. Later require them to write tests themselves.
Don't teach the language, teach concepts. (No, if else and for loops aren't concepts you god-damn amateur! That's just syntax!)
When teaching object oriented programming, I'd smack you if do inane examples with vehicles, cars, bikes and a Mercedes Benz. Or animal, cat and dog for that matter. (I came from a self-taught imperative background. Those examples obfuscate more than they help.) Also, inheritance is overrated in oop teachings.
Functional programming concepts should be taught earlier as its concepts of avoiding side effects and pure functions can benefit even oop code bases. (Also great way to introduce testing, as pure functions take certain inputs and produce one output.)
Focus on one language in the beginning, it need not be Java, but don't confuse students with Java, Python and Ruby in their first year. (Bonus point if the language supports both oop and functional programming.)
Use industry standards. Notepad, atom and eclipse might be open source and free; yet JetBrains community editions still best them.
For grades, don't your dare demand for them to write code on paper. (Pseudocode is fine.)
Don't let your students play compiler in their heads. It's not their job to know exactly what exception will be thrown by your contrived example. That's the compilers job to complain about. Rather teach them how to find solutions to these errors.
Teach them advanced google searches.
Teach them how to write a issue for a library on GitHub and similar sites.
Teach them how to ask a good stackoverflow question :>6
How about teaching a little version control? A passing mention of git in 4 years of college. The entire industry uses some form of version control, and all we get is a passing mention of it?10
Teach people how to google properly.
May sound a bit sarcastic but I think an important part is how to look for errors on your own rather than going to the professor/TA. I’ve seen people paste in whole error logs or more often “code throws error, what do?”
At least teach in classes what to look out for like what error type in java and understanding how to look at stackoverflow questions to apply their solution to your issue.
Moral of the story: teach people how to use existing knowledge rather than just depend on someone to help their exact issue.6
By teaching students how to learn computer science first. Spending more focus on analysing problems, and creating solutions than spending time on language syntax which they can probably watch in videos at home.
I would (at apprenticeship level) start to teach more software architecture and security related stuff.
Yes knowing how to iterate over an array is important but it’s getting lame...
And last but not least it’s fucking 2018 why am I writing a Java 6 swing GUI on paper as a test8
Stop teaching assembly first. It may be the underlying language, but your average coder never needs this confusing mess.12
DO NOT TEACH DIRECTLY HOW TO USE SOMETHING! TEACH THEM HOW TO LEARN BY THEMSELVES!!!! What they teach is outdated and unfit for most students2
Can we all stop using windows at schools and get back to Linux when we are taught c and c++ in colleges. Turbo c sucked.4
If you make students take coding tests/quizzes on paper, don't grade them on picky syntax errors! We don't code on paper in the real world; syntactic highlighting and red squiggles will usually show you that you accidentally typed that declaration incorrectly. Understanding programming concepts is much more important than being able to write a program on paper.2
Get projects from companies and let students compete to complete those projects ,
Projects could be basic , but the students would get a good chance to see what is being done in real projects what tech is used.7
For God's sake! Coding standards should be a subject in university, where the students are thought the right way to name variables, indenting the code properly and many more things!8
Wk92 reminds me of the time when our professor spent 45 minutes talking about the difference between absolute and relative URLs.
45 FUCKING MINUTES!!
I was about to just pack up in and leave mid-class because I couldn't take it anymore. But he noticed, looked at me, then continued talking with the most annoying smug smile on his face.
He knew that if I got another warning, he could get me almost kicked out.
I just sat in the back, headphones in, slowly dying.
And he just smiled...9
It would have been so helpful if they taught us about licenses and copyrights. Would've saved me a lot of trouble.4
Don't start teaching them in a language with a lot of overhead (Java). They spend too much time memorizing the class/method stuff before they even get there. Use python instead.11
I’m a college senior now. The best CS class I ever took was in high school. Our teacher didn’t know how to write software, instead he went around on day one and has us submit proposals for year long projects.
With each project, we had to find mentors in the industry who could help us if we got blocked. Every other week we meet with the teacher (who was more a facilitator) and described how the project was coming.
The results? We had final products that were well beyond the expectations of a high school and more impressive than any project I’ve seen at my university.
Why can’t all STEM programs be like that? Students have incredible ability, but are blocked by traditional education. Let students set the bar.1
My first programming teacher, used to teach Java but never programmed in Java in her life, only read the slides, change this please2
Students shouldn't be told to write a program in a notebook. -_- I remember those days when I used to write C++ programs and my indent was going to the next page of the notebook.
Something like this:11
Remove all the outdated and unwanted topics which were taught during Indus Valley civilization like: 8080 microprocessor, Java 6, Software Testing principles etc. And add more interesting and realistic topics like: Algorithm design, graphs and other data structures, Java 8 (at least for now), big data, Basics about AI, etc.7
Actually be encouraged to test code and play with it to understand the inner workings and gain some experience.1
I noticed that a lot of people are ranting about writing code on paper in the wk92 rant, but that got me thinking: does anyone here write something like "pseudo-code" (or some kind of plan) on paper before they type out their code?21
Teach an actual coding language like C# or C++ instead of Scratch and Java. If you’re going to learn a language, learn a good one.9
Start changing how young people look at programming. It’s not nerds doing nerdy things, it’s about real people using code to solve real problems. I think once the mindset changes it will get many more people interested.6
I think Clean Code: A Handbook of Agile Software Craftsmanship by Robert Martin should be a must to read.
In school no teacher puts emphasis on code quality.
They should learn how to name variables and functions the right way at an early stage in order to better perfect their craft :)3
I agree with the "no code on paper" movement. I also would seek to have more talks on open source projects and configuration development environment for the students to be more successful.2
Already wrote about wk92 but i have to add:
STOP MAKING ME ATTEND COURSES SO I AM EVEN ALLOWED TO TAKE EXAMS.
Like what the hell. You know when it comes to networking i'm doing okayish, coding straight A and then there is maths, let's not talk about it. BUT FFS I WAS NOT ALLOWED TO TAKE 2 OF MY CODING EXAMS THIS SEMESTER CUS I DIDN'T VISIT 2-3 EVENTS OF IT.
I am a coder. I aspire being a coder. I study software development. I just need to prove myself and some dudes can do it. Let me do my thing.
Btw, there weren't any mandatory events for maths. Of course. Why should there be. Yeah okay7
Computer science doesn't just mean teach me how to use Microsoft office over and over... MS Access is not useful!!!5
Some Quotes to Read :
1. The best thing about a boolean is even if you are wrong, you are only off by a bit. (Anonymous)
2. Without requirements or design, programming is the art of adding bugs to an empty text file. (Louis Srygley)
3. Before software can be reusable, it first has to be usable. (Ralph Johnson)
4. The best method for accelerating a computer is the one that boosts it by 9.8 m/s2. (Anonymous)
5. I think Microsoft named.Net so it wouldn’t show up in a Unix directory listing. (Oktal)
6. If builders built buildings the way programmers wrote programs, then the first woodpecker that came along wound destroy civilization. (Gerald Weinberg)
7. There are two ways to write error-free programs; only the third one works. (Alan J. Perlis)
8. Deleted code is debugged code. (Jeff Sickel)
9. Walking on water and developing software from a specification are easy if both are frozen. (Edward V Berard)1
So I can see everything thinks CS should be taught differently this week.
Based on all of the ways we could change it, something no one seems to be mentioning much is security.
Everyone has many ways of learning logical processors and understanding how they work with programming, but for every line of code taught, read or otherwise learnt you should also learn, be taught how to make it less vulnerable (as nothing is invulnerable on the internet)
Every language has its exploits and pitfalls and ways of overflowing but how you handle these issues or prevent them occurring should be more important than syntaxually correct code. The tools today are 100000x better then when I started with notepad.exe, CMD and Netscape.
Also CS shouldn’t be focused on tools and languages as such, seeing as new versions and ideals come out quicker then CS courses change, but should be more focused on the means of coming to logical decisions and always questioning why or how something is the way it is, and how to improve it.
Just my two cents.
Wk92 makes me realize why maths and coding are thaught together..
The time your prof last wrote a program was when computers were used for actual calculations only.😁2
Not asking students to learn the code. Seriously stop doing that.
Instead motivate them to understand the logic and then build it when required.3
Add a course that teaches people how to write and formulate questions.
So that people don't write questions like, "my code no work, plz halp".3
Stop teaching people deprecated bulls*it.
I'm taking a "Web Design" course and the teacher wants us to use html attributes and the <font> tag to format pages. He doesn't allow us to use CSS. Says "We'll get to CSS later, right now I'm teaching you HTML". He thought us the <frameset> thing which isn't even supported in HTML5. And of course no <header>, <footer>, <aside> etc.
Same thing in my C++ course. The computers don't even have a C++11 (or newer) compiler. Just an old version of Code::Blocks we're not allowed to update. It does support C++0x so you can still get some of the features, but still.4
Some of these things have been probably mentioned already in some way, but I'd like to add my two cents nevertheless
I grew up in Germany and have been in the German school system for my whole "school career" and what I always missed was a computer/programming related subject. (A real one, not this thing where they teach how to use MS Office) Something that would have pushed me a bit more into this world of technology and programming way earlier, because I didn't know which possibilities I had. It doesn't happen often that I think that something is better in Slovakia but I have to say that in Slovakia they are teaching CS in standard schools from the age of 11or 12 I think. I don't exactly know what they teach there, maybe it's shit, but it's something at least. I know that most people swear on teaching themselves programming and all but there are people like me who struggle with that.
Then of course I'd like to see the teaching get better. They should teach the useful stuff and focus on practical experience.5
First year: intro to programming, basic data structures and algos, parallel programming, databases and a project to finish it. Homework should be kept track of via some version control. Should also be some calculus and linear algebra.
Introduce more complex subjects such as programming paradigms, compilers and language theory, low level programming + logic design + basic processor design, logic for system verification, statistics and graph theory. Should also be a project with a company.
Advanced algos, datastructures and algorithm analysis. Intro to Computer and data security. Optional courses in graphics programming, machine learning, compilers and automata, embedded systems etc. ends with a big project that goes in depth into a CS subject, not a regular software project in java basically.4
Don't teach just languages, teach how to think programmatically
Make laptops more essential than notebooks when you're teaching
Spend more time on trying to solve problems rather than giving the textbook solution
We should start with demystifying tech...
For most people, modern phones, tablets and pcs are magical rectangles...
The law of Clarke says, that every sufficiently advanced technology is indistinguishable from magic.
And we have to tackle that.
In geography, we should talk about gps and glosnas
In English or foreign language lessons, we should speak about translator bots and language patters/abstractions
In physics, we have to understand the measurement devices
In politics, we have to speak about licenses of use, we have to speak about netneutrality as a political concept, we have to speak about snowden, shadow brokers, the vault, all the laws some shady imperial beauroticians pipe into our life.
Trojans used by the government and so on...
In cs concepts of operating systems, abstractions and networking should be taught, instead of using excel.
That could be done in math...
Well... No one should have to work with excel.
In maths they could use Wolfram alpha, rlang and gnupolt for example14
Professor: "I've been using java for many, many years and know close to everything."
Student: "How do I compile my code on the unix server?"
Professor: "uhh.... I don't know."
Let's start hiring people who actually know what they're doing.1
I would appreciate if teachers brought in developers that actually work in real projects writing code to show us what they do and how they solve problems every day.1
Give students opportunities to create beyond the course requirements. Think hackathons, clubs, department projects, etc. So many cs majors don’t do anything beyond schoolwork.2
Don't start with Java but something simple like Python or Ruby or anything that doesn't need that much blob too run a Hello World! program. That was what confused me the most. And by 'start' I mean like the first few lessons, just to get started.14
I feel like almost all suggestions to wk92 here on devRant have already been fixed at my university...4
1. No paper-pen exams asking defination of OOPs.
2. Introduction of VCS (e.g. GitHub, SVN, etc.)
3. Introduction of new programmimg languages in the curriculum.(Pls stop with C/C++...there are 1000s of tutorial for that)
4. Give access to licensed software. (Especially in India we were forced to use cracked softwares).
There is a lot to change. But i think mentioned all the important stuff.3
Stop making A level students write code on paper for the exam and instead let us take the exam on a computer8
Except my class being full of fucking idiots (see another rant...) I wouldn't change nothing.
Pretty happy right now!2
Boy was I happy to see this when I opened devRant up.
So for starters, more group projects are necessary. Many reasons why. To begin with, it allows for more complex programs than getting some input and printing some shit out. It also develops interpersonal skills (I hate people too, but when you go out to look for work you'll be with them, so better get used to it soon). If a platform like GitHub is used, it's easy to track who did what, and see what each person in the group did, so it should be fairly easy to discourage lazy asses.
Beyond that, stop giving us half completed assignments and asking us to fill in a function/method. Yes, it will take longer. But one doesn't learn to program by doing the minimum required work, you've got to crash and burn a lot in order to git gud. So ffs, let us do all the work. We're like AI, we learn through reinforcement learning.
Stop giving us a spec to follow. We'll do plenty of that in the future, right now we need to make mistakes, not be held by the hand all the way. Let us do dumb shit so you can fail us and tell us our code is repulsive, and this other way was better. Explain why. That's how people learn, not by telling us what each function should return, what can and can't be used, etc. And if you can't come up with a scenario in which what you're teaching is useful, then maybe you're not teaching us the right material.
I'll leave it at that for today... But I'll be back 😈
Teach programming languages practically. You can’t make a person learn to program when they’re just sitting in a lecture hall staring at the board. Sure, you can teach them concepts like classes/OOP/etc., but you can’t throw 20 lines of code up on the screen and expect everyone to understand it and be able to replicate it or tailor it to their needs.
It’s like learning a language. You can learn the concepts of e.g. tenses in Spanish by sitting in a classroom, but you don’t really know it until you’ve used it in real-world situations. You need practical experience building stuff in a programming language to *really* understand it.7
First thing, give the schools enough money to buy proper IT equipment and hire at least one person who does IT full-time per school so that the CS teachers or whoever runs the school's IT infrastructure doesn't have to worry about it at all times.
(Hopefully, the ban on cooperation here in Germany will be lifted and the federal government will be able to subsidy all schools at least financially in that aspect.)
Then, educate all the teachers, for fuck's sake.
It is sad to see an otherwise good teacher in a technical subject at a technical college struggle with the basics. Teachers should have continuing education in computer science and also should be comfortable working with technology.
There are some good CS teachers and some who're also nerds but they can't fix everything nor educate every colleague. Unpaid and in their free time, mind you.
Then, update the learning materials for CS. I've seen/worked with some of what is used in schools today and it's definitively not worth the money but it has to be bought anyway. At best, education materials should be open-source so knowledge can grow and be updated more quickly.
Also, don't rely too much on big cooperations just but cause they offer you shiny materials and discounts.
This weekly is getting really popular with so many rants coming in.
Shows the extent to which real coders/programmers/developers are tormented by the incompetent education system.
Here is my two cents:
Students should be taught to build their logic on paper before jumping on to their keyboards.2
After a year of college give everyone 2 hours to solve a programming problem in the language of their choice. Like implement a doubly linked list, or count the number of primes between two integers or something straightforward. Anyone who can’t do it gets kicked out of the major.
I’m sick of dealing with people who are 3 or 4 years into a CS degree, and can’t do 30-line programming assignments in two weeks. I might have to work with one of these clowns someday and I hope to God that my university doesn’t send them into the workforce with a degree.3
Have higher technical schools with computer science as one of their topics (such as the one I visit) introduce people to how RAM works in detail earlier than in fourth grade, which would really help some of my classmates.2
First and foremost introduce concepts like version control from the beginning. As for the rest, the motivated students will teach themselves the relevant things and the others will fail/drop out. That seems to take place now.
My biggest complaint with the education system is more general and not CS specific. Remove all of the gen ed requirements. REMOVE ALL THE GEN ED REQUIREMENTS. They don't make you "more well-rounded" they just set you back 2 extra years and throw you into twice as much debt as necessary. We spend 13 years learning the foundational things just to spend 2 years in college paying out the nose to go through it again.
Fix that and add a few relevant ideas into CS degrees and I think the education system is decent. There will always be bad teachers, but software developers need to be able to pick things up themselves so it's just preparation for when they get a job and have a useless senior dev to work for.
It would be great if CS students graduated and emoloyers could plug them in anywhere knowing that they can do their job without anymore training.
There for I think students sould have full on collaboration with high risk companies. Deadlines with serious consequences if they aren't met (i.e bad reviews on your profile). Computer science and programming really needs deep thought and concentration. Being able to work in a team to deal with issues as fast as possible.
These days you don't need to know a lot of theory to get started. Knowing it all helps, but being able to figure it out and then finding beter ways to slove the issues as you progress through becoming a master in your field really burns the knowledge and skill into your being.9
CS education needs to focus on running students through each branch of the field so they can find their focus . Once they have decided on one, they should then dedicate their studies to that branch. General knowledge of all branches of programming is good but it isn't realistic for one to be experienced In each. This is coming from a dev who dropped out of college to start his web dev career because the university of Tennessee had put me through three years of c++ courses and not one web development course. Also the math requirements should be based on which branch one picks. If they are going into web development, I do not think half of their classes should be advanced mathematical courses. We deal primarily with simple business mathematics. Even when dealing with a project that is powered by more complex mathematical formulas, the company would most of the time have an engineer if not a team of engineers that would design these formulas in the mockup process which would then be passed down to the web development team for execution. I get that universities want to think about the experience as a chance to learn and flourish in all regions with a sense of well roundedness but I am not inclined to think that way. Let's prepare our youth for their future careers. Btw my first three jobs did not ask a thing about college but only my work experience. Experience takes the flag almost every time. I'm pretty tired of applicants literally coming from their ceremony with their diploma in their hand begging for a job and bragging about their HTML,CSS skills and wide knowledge of c++. Sorry but it's a no go and if it takes them nearly as long as it took me to teach myself the craft then they will be graduating at 22-24 and sinking another 2-3 years into learning the web dev ropes. Ain't nobody got time for that when your paying 40g worth of student loans 😂. I'll take it a step further, tell your CS professor to shove it, spend the amount of time you would have wasted there with learning laravel/vue.js. When you've got your head around it, come in and I'll give you a job!
Don’t teach with LOGO, but instead start with Scratch, then something more advanced like Python and after that maybe C# or Java.
Teach different operating systems and software, not only Windows and Microsoft Office. There should be class with Linux (Mint for instance) with LibreOffice and another with macOS and iWork.
Teach basic troubleshooting steps.
Less theory, more practice.
STOP BEING SUCH MICROSOFT ORIENTED.
Ability to use own laptop (I would be really happy to use my own one).
Teach basic commands for Windows and Unix based systems.
Teach how to install Windows and Linux.3
We should get rid of loop invariants. They are cumbersome and counter-intuitive (hopefully someone gets the inside joke).1
P L E A S E
Do not just teach them on how to program. Teach them on how to properly write a documentation and how to properly execute a project. Like, don't start coding directly. Teach how to plan a project properly especially on estimation. (lol)4
Stop giving me pdfs, stop giving me word documents, stop giving me paper handouts. Just give me a README with the assignment on it that I can throw into a git repo where everything else I hand back to you is going to end up anyway.
It doesn't even have to be markdown'ed to death! I mean, that's a plus, and then you could, you know, have your example code's syntax lit up properly among other things. But a text file is all I really needed!1
I tried and I'm giving up. I have spent nearly two years of my life trying to teach kids to code but it feels like standing in quicksand I don't get to learn new stuff I feel myself turning into the kind of teachers ppl make fun of here. I used to pride myself in being the fun teacher that kids look up to. Guess I'll quit while I'm ahead1
Just let people who already know the things you are teaching miss the class entirely. Give them some test at the end, this is okay but do not force them to suffer the endless hours of something they are already good at just because you want them to attend.2
Something I would change from one of the classes I took: Don't teach using a Scratch and then jump straight into python. It would have been a lot easier to just start at python. The only reason I would teach scratch is for a kid who knows absolutely nothing about how a computer works1
I come from a fuck-all university called Visveswaraya Technological University (VTU for short) and the syllabus is something from the 90s. Now modern technology 8s taught, old AF practices and useless subjects. Hell, we're not even taught design patterns.
So what would I like to change? The whole frikkin thing. My transition from college to corporate was *BAD* because the expectations were completely different.3
Stop. Using. Fucking. ADA. To. Teach. Basic. Programming.
I wouldn't say you should use a dynamically typed language like Python, but having programed since high school, I hated each and every aspect of Ada. We were even taught OOP and generics with it! (And not, you do not want to know how it is, because it is dreadful)9
We need to separate concerns. Too many CS courses skip over theory and teach outdated tools and technologies, often those of a sponsor who is failing in the market.
Computer Science is supposed to be about the science and formalisms of computation. The job of programming is Software Engineering. A few colleges have SE degrees, but too few.
No one understands anymore the likes of Knuth, McCarthy, Dijkstra, and Hoare. I'm willing to bet that most of you have never read any of their work. Few people really understand their impact on the tools we use today or the importance of their work. CS courses should teach that and expand on it so we can get more huge leaps in tools and concepts.
But we also need Software Engineering to teach students current tools and the latest paradigms.
CS, as it is, doesn't do that.
Introduce Git - Promote Collaboration
In the real world they won't work alone. Instead of giving individual projects give them a module to work for.
Example project: Library System
Student 1: Sign-up module
Student 2: Log-in module
Student 3: Book sorting module
Student n: x module
Output: A working system
With this approach, students will learn to work with a team and communicate properly about the project they're working for.2
I didn't realise that so many people in a dev social space cannot differentiate SE from CS...
Also, lecturers should have some mandatory teaching training, just because you have an area of expertise, doesn't inherently imply an ability to teach the material to the students. Powerpoints, and endless incoherent monologues are the bane of my existence2
Here in Spain instead of calling it CS we use the term "Informática", which is closer to the broader IT. Which means that hyped me enrolled in all the "Informática" courses since high school, only to be shot in the face by yet another "Let's learn PowerPoint" course. I honestly hate that.
I've been giving small courses (one week long) to kids at age 12-16 about real programming, starting from scratch to real-world arduino or Java, because that is what I hoped I would have found at their age.1
I have been interning at a tech company as a software developer. And it is a paid internship program where I haven't got any stipend for the past months. I have to pay rents, bills, even my transportation too. So o decided to startup a tech company along with my friends. Later this month we are launching our first product.3
Oh where to start.
TLDR, *actually* prepare students for the *real world*.
- TEACH GIT.
- Stop with the useless projects with esoteric restrictions that absolutely do not exist in the software work field
- ENCOURAGE collaboration rather than make it academic dishonesty with high punishment consequences. Devs need to learn Teamwork!!
- Don't start 101 with Python then go straight to C++ in 102
good lord, the easier question is what DOESN'T need to change in CS undergrad programs.
Teach things properly, most teachers are confused and they start throwing keywords at even more confused students who then have no clue what they are doing and they then ask me to do their work for them showing me their unindented(well... kinda, they all seem to fight with the IDE, which is trying to properly indent their mess, for some reason), teachers think that Turbo Pascal is the way of life and that it is used everywhere(one teacher tried to tell me that Pascal is used in the stock market and in modern operating systems - U wot m8?! how high are you right now) and they don't teach user input sanitization and type checking, they stare at you like you are the fucking satan when you dare to use objects, collections and abstraction because they are scared to death of that stuff... and then they think 60 minutes is enough to teach HTML, CSS, JS and PHP in one go(which they even don't know properly - the teacher that made and maintains the school's website is probably stuck in 1998 judging by the design and functionality of the website and his clothes) and they then send absolutely clueless students to compete in a web design competition (and then they get angry at the judges for giving the students 0 points)6
teach meta language concepts: what is an operator, literal, constant, statment, control flow. the recursive nature of staments. then go into objects/methods vs structs/procedures. then teach some java. then go into reflection concepts. then use reflection for something simple. then teach a bit of perl. then let them build something in python. Anyone who can pass through that will know how to Program in whatever you give him/her.
I wish my teachers talked about the meta programing, instead on focusing on the minutia.
Here: this is BDD, a Linter, and Git. CI your shit to staging before you CI to production. Never deploy on a Friday.
Ohhhhhh shit, this is a good topic.
Well, I just expected more... Better.
Like maybe the programming lecture could have been Java 1.6 rather than 1.2, and taught rather than read from an archaic time of dusty powerpoints.
Maybe we could have used Spice or a reputable circuit modelling tool rather than CircuitMaker; a tool no longer being maintained that barely makes it past install because it was written in a time before circuits.
Maybe day fucking one of the first year, happy clappy, let's teach you HTML lecture the tutor could have just shown us a copy-pasted hello world. Rather than the ugly, mixed-case, no-end-tag-having, broke ass HTML 4 scribble she felt the need to go over every detail of.1
Students should have to teach each other concepts. This promotes collaboration, reinforces learned information, and makes people less douchey to work with on a team.3
Focus on projects, not tests.
If you want people to be able to code, judge them by their ability to code.
Plus that way your graduates have a portfolio as opposed to a grade list that says nothing about their usefulness in the market.
If you must do tests, at least mimic real world conditions:
- Digital, no paper
- Internet allowed (have rules on copying SO if you must)
- BYOD, let people work in their customised environment
Teach kids to love computer science first, the rest comes later.
When I was in uni, most of my pals don't know why they're in the class. How the fuck can you teach linked list implementation when most of the students don't seem to bother to understand what a variable is?
0. working PCs
0.0 technically they are working, but they are too slow to even open up eclipse
0.1 maybe this gets better at university
1 coding on paper
2 not using google + usbs + network drives for code sharing
3 if it might be applicable PLEASE ENABLE THE FUCKING CMD! OR LET ME USE ARCH ON MY STICK! C'MON2
Teach useful knowledge !
Back in first year of engineering school (most of students weren't going to study CS), the introduction course we had was on recursive functions.
Try to imagine the faces of guys who had never seen an 'if ... else' in their entire life.
Oh my, never was i triggered more. Of course i can only speak for my experience. I study software development as focus.
First off, the starting languages and or concepts you learn.
Why the fuck do they start with java and don't even really explain how instances actually work? Of course they don't. Because it would be way too fucken much for a semester to go over garbage collection, Instanciation of stuff, allocation in such an advanced system, etc..
How about starting with something not 50% managed by a vm?
Good ol' C. And now don't tell me thats a rough start. We all know about these subjects or exams where it's all about sorting people out. Who will be able to manage a whole bunch of shit or who should consider something else.
Yo dawg sick idea: how about sorting it via the will to achieve the skill of coding?
Nah but we make the exams around coding (by the fucking way done on paper, what the hell) such a fucking breeze, asking you how to convert hex do dec.
Meanwhile maths will make you cut yourself in a dark corner, after you nearly shot yourself because of some lame-ass business-subject.1
For higher grade software development it should be mandatory to understand the big picture of problems...
If you are working for a online shop, you might want to ask marketing, what they want to sell, before they do it
You might want to ask billing, what customers buy, before you spend time on unnecessary features
You want to ask billing and legals, how they do fraud detection and you want to get the it security fellows on board too.
If marketing and billing knows, that maintenance needs time and money, they can calculate with that. If security knows, that some fails will be catched, no matter if you fix it in software or not they can adapt their priorities.
You might want to know something about process optimisation... Factories of car parts have spent years on such problems - learn from them.2
I would replace it completely with industry apprenticeship, along with every other major. Education in the USA has become a scam designed to mine children for debt. If we're shackling kids to their student loans we at least owe them relevance in their chosen workplace.
Germany apparently let's people choose apprenticeship over university for work such as engineering. Does anyone know more about that? Does it work? Would it work for programmers?5
Competitive programming should be encouraged that is the best way to develope and improve logical skills
Start with it at age 4, learn children to protect themselves on the internet, but also show them the possibilities. It's not something I expect this generation to properly teach the next one
And name it something like Computer Security
SE != CS
I didn't know this when I started my CS education. The dean of CS undergrad said "we are not here to make programmers" and I was so confused, but now I get it. CS is about the fancy theory and the boring Turing machines and what not. I don't want to do that! I want to write something impressive and awesome and cool-looking!
I wish they would have told me the difference.6
(IMHO) The current system fails to identify that there are at least 2 main paths one can take in our field. Software engineering and computer science.
Software engineering should not be just a course. It should be a craft, a degree. Where one can learn practical things not just algorithms that are used in niche cases.
Computer science branch won't be that different from what we've got now. It can be even more focused on theory.2
Make an effort to keep hardware up to date. My school uses Windows Server 2008 to teach Networking 🤔🤔🤔3
Start it earlier in education or at least give the option to students to study it earlier in their schooling. I wasn't able to study it at all until my final year.1
One problem for CS education is that the salaries for academia are so low compared to industry that if someone is even vaguely competent, they can at least double their income by working a 'real' job. Now this may be different at higher levels of colleges but generally those folks are such bullshitters they wouldn't last outside of academia.
As what to improve?
Depends if it's a research or vocational course.
Basic knowledge of algorithms, runtime analysis (O notation) and some data structures and you're an instahire.
For research, go wild. Deep dive into the math, algorithmic side. Read up lots of research papers. Try out different programming paradigms. You would aim for a career in academia, AI, quant finance etc...2
I study both mathematics and computer science at Delft university. There's a difference between the approaches these two studies have.
Mathematics is usually about going to lectures, learning complicated stuff there and then using the obtained knowledge in a exam at the end of the course.
The CS courses are kore about engineering. They have practicals way more often than the math courses and the exams usually are of les importance.
It feels as if the "academic level" of the CS courses is lower. In math, we learn the real deep, abstract matter, while CS is more about "tinker up something nice in the practicals and you'll be fine."
I'm not sure if either approach is better, but I'm sure I like the maths version more. The CS approach is more HBO-like (HBO being the lower-level universities)
It is even that, generally speaking, the people who study maths seem more serious about studying than the cs people.
Not all of them, and no offense meant, just an observation.
Well, that was not really a rant. If you read up to here, I'm curious what you think about this.3
Recently my company has bought a patented product from the IIT, Kharagpur, India (those who are not from India just Google this name. It's one of the most esteemed engineering colleges in India). I can not provide the details of the product, but let's talk about the technology stack they used.
The software module of this product was built using VB 6 (yes, you read that right) and MATLAB 6.0 (released in 2000), and used MS Access for database. Remember, the product was built in 2015 and patented in 2016 or 17. The people who built the software were mostly final year B.Tech CS (equivalent to B.S.) students and one IIT professor.
This shows what we need to change in the CS education. Do I need to say more?1
Teach data structures by showing how they're used in real life situations. Don't make us do some nonsense puzzle shit. For example, a friend of mine is learning stacks/queues right now and his assignment is to build a simple HTML parsing algorithm to determine whether an HTML file is valid. This shows the student a practical use of the data structure and reinforces that this shit actually does get used in real life.
Update syllabus with latest technologies instead of teaching some outdated language which has no practical use in the market.
Stop teaching T-SQL on paper. If i have to write one more transactionsafe sql query without a debugger i'm going to fucking kill somebody.
Let's focus/master computer architectures, coding paradigms, datastructures. Everything comes after that...the problem with todays academics is that they are more focused on immediately deploying students to industry; theyre more focused on teaching specific frameworks and specific language instead of teaching how things work...i bet most students (at least in my country) are having troubles with endianess or encoding or even byte manipulation or what a thread is....If im going to be the teacher for example of an oop subject, ill let the student choose the language they want as long as the oop paradigm is intact ,it will be fine.. i dont friggin care whether you know vue or angular or swing if you dont even know what a callback is..
Right now I am hating everything, the job, the people i work with, the people I live with, the city and the people in city.
I have no motivation left in me.
All I want to do is sleep and eat pizza.5
Well it’s Sunday so last day to leave my thoughts on probably the only topic that’s current to me.
I think you should pay teachers a competitive salary.
The problem with teaching CS at high school level especially (in university there are grants, actually competitive salaries between unis and other perks) is if a person is versed in programming/cs theory why would they settle for a $40k job? When the alternative is finding a job in the field where salaries are around $80k+ (this figure came from my head, can’t remember the source) it’s hard to justify going into teaching even if you would enjoy it more than a desk job.
If the salary difference was smaller then one could maybe justify liking work over pay but here it’s basically double difference... Kinda makes you understand why some comp sci teachers seem incompetent in even using their own computer. Yes there will always be that odd person out who will teach (or go to a private school and negotiate a workable salary) but until education becomes a priority for government salaries there will be very limited progress, if any.
You can do anything to the syllabus, make it more verbose, make it appeal to the lowest common denominator, but if you can’t find people to teach it (and know it themselves) you are really screwed.1
Ban visual programming programs, like scratch after the fist month introduce them to enhanced Google search strings and let them code on the command line going from imperative, over functional to object oriented programming styles using languages suited for the current style. Not like using Java from the get go. I hated it, waiting until everyone got to the point where they kind of understood the logic but failed at using correct syntax and efficient coding styles.
Instead of giving exams at the end of the course, make the courses project based. Most cmps students at my university only memorize information (and even memorize code) just to get a grade, but if instead they had to present a project at the end of the semester they would learn much more and have more experience2
My path to software development was: Hardware Engineer, Helpdesk Analyst, self-taught Junior C# Developer...
Will not studying CS become a hinderance later in my career?14
While teaching theory is actually good, it doesn't mean that there is no room for any practical education either. Students needs to be exposed to modern programming languages like Python, Ruby while at the same time be trained in the pioneers of programming like C, C++, Java. It is only then would they be able to make informed decisions on who they really want to be. If you had one practical lab session on C and Java and then the rest of the semester about HTML, students would end up moving away from programming.
Concepts like programming and networking concepts should be included whereas ancient technologies like programming micro-processors (x386, x486, etc) should be excluded. Who programs x386 and x486 micro-processors anymore? While the understanding of how micro-processors and other low-level components in the computer systems work is very essential, doing practicals on them isn't really a good use of students' time, energy or effort.
To me this is one of the most interesting topics. I always dream about creating the perfect programming class (not aimed at absolute beginners though, in the end there should be some usable software artifact), because I had to teach myself at least half of the skills I need everyday.
The goal of the class, which has at least to be a semester long, is to be able to create industry-ready software projects with a distributed architecture (i.e. client-server).
The important thing is to have a central theme over the whole class. Which means you should go through the software lifecycle at least once.
Let's say the class consists of 10 Units à ~3 hours (with breaks ofc) and takes place once a week, because that is the absolute minimum time to enable the students to do their homework.
1. Project setup, explanation of the whole toolchain. Init repositories, create SSH keys for github/bitbucket, git crash course (provide a cheat sheet).
Create a hello world web app with $framework. Run the web server, let the students poke around with it. Let them push their projects to their repositories.
The remainder of the lesson is for Q&A, technical problems and so on.
Homework: Read the docs of $framework. Do some commits, just alter the HTML & CSS a bit, give them your personal touch.
For the homework, provide a $chat channel/forum/mailing list or whatever for questions where not only the the teacher should help, but also the students help each other.
2. Setup of CI/Build automation. This is one of the hardest parts for the teacher/uni because the university must provide the necessary hardware for it, which costs money. But the students faces when they see that a push to master automatically triggers a build and deploys it to the right place where they can reach it from the web is priceless.
This is one recurring point over the whole course, as there will be more software artifacts beside the web app, which need to be added to the build process. I do not want to go deeper here, whether you use Jenkins, or Travis or whatev and Ansible or Puppet or whatev for automation. You probably have some docker container set up for this, because this is a very tedious task for initial setup, probably way out of proportion. But in the end there needs to be a running web service for every student which they can reach over a personal URL. Depending on the students interest on the topic it may be also better to setup this already before the first class starts and only introduce them to all the concepts in a theory block and do some more coding in the second half.
Homework: Use $framework to extend your web app. Make it a bit more user interactive with buttons, forms or the like. As we still have no backend here, you can output to alert or something.
3. Create a minimal backend with $backendFramework. Only to have something which speaks with the frontend so you can create API calls going back and forth. Also create a DB, relational or not. Discuss DB schema/model and answer student questions.
Homework: Create a form which gets transformed into JSON and sent to the backend, backend stores the user information in the DB and should also provide a query to view the entry.
4. Introduce mobile apps. As it would probably too much to introduce them both to iOS and Android, something like React Native (or whatever the most popular platform-agnostic framework is then) may come in handy. Do the same as with the minimal web app and add the build artifacts to CI. Also talk about getting software to the app/play store (a common question) and signing apps.
Homework: Use the view API call from the backend to show the data on the mobile. Play around with the mobile project to display it in a nice way.
5. Introduction to refactoring (yes, really), if we are really talking about JS here, mention things like typescript, flow, elm, reason and everything with types which compiles to JS. Types make it so much easier to refactor growing codebases and imho everybody should use it.
Flowtype would make it probably easier to get gradually introduced in the already existing codebase (and it plays nice with react native) but I want to be abstract here, so that is just a suggestion (and 100% typed languages such as ELM or Reason have so much nicer errors).
Also discuss other helpful tools like linters, formatters.
Homework: Introduce types to all your API calls and some important functions.
6. Introduction to (unit) tests. Similar as above.
Homework: Write a unit test for your form.
Learning programming, networking, robotics, and other technical skills are very important but do not forget that these are future working software developers.
They will need to know a lot more intangibles. Like effective pair programming, performing proper git pull requests and code reviews, estimating work, and general problem-solving skills and more.
These people will be learning technical skills for the rest of their life (if they are smart about it) but what can really get them ahead is the ability to have good foundational skills and then build the technical skills around them over time.
In the programming aspect of CS, you should have to debug and fix a previous student's project for your final grade.
You don't really learn to appreciate the value of clean code until you've had to fix shitty code.
Teachers. We put so much effort in learning, I think it's only fair that you know what you teach. You are supposed to simplify our learning process not make it worse. We don't need a lecture hour to read your ppts.1
Talk and teach about FOSS software to students and not force them to learn a specific tool or language for a task .2
Teach students the importance of clean code/architecture and testing. Even if they dont yet understand the more complex topics such as architecture, they should understand why quality is important and that software is a craft more than a science. You cant just apply principle X and insert design pattern Y and profit++. You actually have to think and constantly improve. AND TEST.
Think I would probably also cover things like build automation and continuous delivery. These are now important things for junior devs to know about going into companies.
My college taught CS on Windows 7.
You weren't allowed to install things either.
And students only used GUI programming environments.1
Well for starters the website that gave you assignments on security of web applications shouldn't have an SQL injection vulnerability on the login page.
Next would be the method of teaching, they would skip what not to do and go straight to what you should do. This in turn causes people to use the exec command in php that actually takes a POST parameter.
And stop allowing teachers to be lazy fucks that don't explain shit and only give you assignments.
And finally when telling the teacher that a method he uses would cause another vulnerability the teacher should properly fix this issue not say it is for an "advanced course".
Yes I am pissed
Don't blame the teachers, they don't know the latest technologies themselves, they are mostly graduates, who have almost no work exp, so they might not know latest technologies or how to use em, neither do universities fund them to learn them
P.S. Not a teacher, just put yourself in their shoes2
Tbh this is more about education in general... Introduce the same system i had, no fixed lessons just a project and a time frame. Eg : create your own MVC framework and a site to show it off
Time frame : 5 weeks
(dont expect fully fletched frameworks but a site that uses the MVC data flow and the code is reusable)3
USE F🤬 GNU/LINUX!!! After, make technology really available (there’s cheap but functional options like ltsp). Teach the f🤬 bases of programming! Use open source softwares! How Internet works and privacy thing! Learn to read f🤬 terms of contract and privacy things, teach that ie is fucking shit and also, the most important thing! Use dark theme, don’t hurt others like I was!
And also, use vim
Actually having exercises to try so that the 90% of CS students that learn by doing can learn. Rather than writing down theory1
As a person who never took any CS courses, I don't really see the market value of them, apart from getting through ignorant degree gating at companies with backward corporate philosophies.
As I understand, even a degree isn't really that helpful in getting your foot in the door.
That said, the week 92 question assumes there is something wrong with the nature of CS instruction. College is not trade school. The point of it is to get an education, not a job. Many employers require that education, and that's their prerogative, but for a number of reasons, chief among them being the rapid pace of the advance of technological concepts, most employers do not.
A candidate having a CS undergraduate degree is far less attractive to an employer than one without a degree, but who has a year or two of experience with the technologies the position involves.
That said, I personally think that as college is for an education and not career building, computer science curricula should focus on theory, and not on applied technology. A focus on the latter just guarantees that the subject material will be dated and irrelevant.
But as many people (maybe even most) think college is trade school, I think it's absolute madness to enter into debt slavery in exchange for expiring qualifications.3
I just wished my previous alma mater treated CS students well like damn shitty teachers only teaching them Word and Excel (which is basically already taught in junior high).
Meanwhile my current alma mater is taking C# and Android development.
I pity those fools.
I am a programming teacher in Colombia and the week's topic is very useful for me, thanks to all for writing your ideas, but in the other hand I think that some points have not been understood, for example in my college we use in the beginning of the course notepad so that the students learn the sintaxis and good practices and they no dependent of a especific tool or Ide (an advantage of this practice is that the student learn to use command tools easily). We want that que student learn programming and not a language or software . This because in our experience the students learn to use a tool but not to resolve a problem and this is bad in a long term.2
Not so much a problem with the way CS is taught, but I think it's a problem that a lot of people put emphasis ONLY on programming (and maybe data structures and algorithms) and ignore things like Computer Architecture or Theory of Computation.
Most of the CS syllabi I've seen are built very well, but many students (and some teachers) seem to ignore a bunch of subjects because they don't contribute to making them "hireable".
Let these rotting institutions die.
Old people still get duped by telephone scammers, but you don't hear anyone saying we should reform the scam artists.
Then again, corporate bureaucracies don't put "Victim of $40,000 Telephone Scam" under their minimum requirements.
I guess if they did, we probably WOULD hear from the hilltops, "We Need Telephone Scam Reform Now!"
Apparently, a lot of people here are complaining about the fact cs classes (and I'm talking about uni here) are way too much theory and far too less teaching practical things. And don't get me wrong, I don't like viewing cs only from a theoretic point of view either, BUT I think cs education is made to teach you how solve complex cs problems by yourself and give you the tools on how to learn about these things in the future. And this is very much theory.
CS is the science part, so don't wonder if there's a lot of theory in it. If you only want to learn how to program, maybe you should take programming courses instead.
In school though, cs education should be less theory and more doing practical (funny) things, programming, "how does the internet work", "why I should not give my credit card details to random strangers on the internet", things like that.2
stop teaching language syntax and start explaining the ideas and the concepts in computer science.1
I learned more studying myself and in the workplace / jobs.
The problem is money, what will you prefer: teach to a classroom or double / triple income working for a tech company.2
Update the method books and lectures, first and foremost. Nothing better than studying outdated versions of languages just because university's technical base can't accommodate anything newer.
Upgrade the universities' hardware and software (I studied CS subjects on 1998 hardware with Windows XP and Lubuntu on board).
For the love of anything holy, stop making students program on paper.
Make professors available via e-mail. A surprising number of my professors weren't teach savvy enough to use it.
Introduce programming in highschool. Use a language that is easier to grasp than Delphi or Pascal. We had informatics as a class, and it never covered anything aside from Microsoft Office.
So... Portugal already have CS classes for almost 20 years. Don't know what they teach now but everyone would know how to use windows, word and excel (specially kids without computers). My course was computers (what was called back then) and we spend half an year doing logic programming in paper and algorithms...
Any class that teaches programming should always start with logic programming, because you can apply it to any language...
Example: my latest programming class was 3 years ago, I did a CNC course (to work with machines that make molds... Think a 3d printer that cuts steel instead of pushing polimers) and my first question was :don't we start with logic programming or algorithms? The teacher first teased me... Then asked what is logic programming....
Resuming... At the end I was the only one who could use functions and variables... (check g-code and heidenhein, you'll get it).
Other then that I was the only one who got a job working cnc machines, everyone else that also got a job whent for the manual labor part (the molds are finished by hand)...
So... My thoughts... Any CS class that teaches programing should start with logic programming and algorithms... That's the foundation to learn any programming language.7
For middle and high school:
1. Let people teach who actually know what they are doing
2. Learning by doing is in my opinion the only good way to "teach" someone how to code.
(And well theory is just like math. So teach it like math.)5
Fire every single teacher who runs from self education. Someone who keeps themselves up to date should be keeping students up to date.
Secondly, assign each class a major project which starts from 4th semester with one of the faculty acting as the Project Manager. Allow each student to choose their area of interest and work on that module. This will help develop team work and teach how not to rm rf production server or db:drop production database ^.^
- Promote source control usage especially in group projects
- Teach clean code principles
- Push for commented code in exercises
1. Teach DS and Algos. Not basics but advanced data structures and the ones that are recently published.
2. DBMS should show core underlying concepts of how queries are executed. Also, what data structures are used in new tech.
3. Teach linkers, compliers and things like JIT. Parsers and how languages have implemented X features.
4. Focus on concept instead of languages. My school has a grad course for R and Java. (I can get that thing from YouTube !!)
5. Focus a little on software engineering design pattern.
6. It's a crime to let a developer graduate if he doesn't know GIT or any version control. Plus, give extra credits for students contributing to open source. Tell them if they submit a PR you get good grades. If that PR gets merged bonus (straight A may be ?)
7. Teach some design pattern and how industry write code. I am taking up a talk at school to explain SOLID design pattern.
Mostly make them build software!
Make them write code!
Make them automate their homeworks!
Make them an educated and employable student.!1
First and foremost, students should be carefully taught the logic and mentality behind programming. Most of the time I see that the introductory programming courses waste so much energy in teaching the language itself. So students kinda just get fucked cause many people end up ending the course without having actually gained the "programming perspective".
Stop teaching pointers and lambdas and even leave the object oriented stiff till later. If a student doesn't know why we use a For loop then how can they learn anything else.
I believe once that thing in your brain clicks about programming, everything goes smooth from there... kinda :P
Second of all, and this pertains mainly to the engineering and science disciplines.
We need a fundamental and strong mathematical foundation. And no I don't mean taking fucking double integrals. Teach us Linear Algebra, Graph theory, the properties of matrices, and Probability theory.
One of the things I suffered from most and regret in university is having a weak foundation in math and having to spend more time catching myself up to speed.
It's so annoying reading a paper on a new algorithm or method and feeling like an idiot because I can't understand what magic these people did.
Ok this is more deeper, maybe a 2nd year course.
But this is something we take for granted.
Computers don't magically add and subtract and multiply.
They fuck up.
And it'll bite you in the ass if you're not even aware that the computer we all love so much isn't as perfect as we think
Some hardware knowledge.
Probably a basic embedded systems course with arduinos
just so you can get a feel for how our beautiful software actually makes those electrons go weeeeeeeee
just give me the internet and some projects
Ill learn everything else
Projects are the best motivation
I hate this purely theoretical approach
where we memorize or read code and write these stupid exams
Test what we are capable off
make us do projects that take sleepless nights and litres of coffee
And judge our methods, documentation, team work, and output
Team work skills and tools (VCS, communicating, project management, etc.)
Documentation and Reporting
maybe even with LaTeX :D
Yeah that's the gist of whats on my mind at the moment regarding an ideal computer science education
At least the foundations
The rest I leave it to the next dude.
I would like the university to work like an organization, instead of teaching stuff on board for 4 long years, they should teach during a few months and then asking students to work under faculty (faculty as their project manager) and In a team of x no. Of students. This would let us learn multiple concepts including organizational behavior and working with different team(people you aren't comfortable with beforehand.)
I know there might be some loopholes on Marking system, but I was never a fan of any king of marking/grading system.2
Since CS is about the science of computers and not about a particular programming language, it would be nice if assignments were accepted in any non-esoteric language, as long as it can demonstrate that the student has learned whatever he was supposed to learn.
Bonus points for explaining well why that language was chosen.1
This is why we can never have enough software developers
It's true. No matter how many people learn to program, there will never be enough people who know how to program. They don't have to be very good at it either. It is now a required skill.
Minimum wage in first world countries is way above 5$ per hour. A Raspberry PI 3B costs 40$, or at most 1 day of work for the worst paid jobs. And it will run for years, and do routine tasks up to thousands of times faster than any employee. With that, the only excuse that people still do routine tasks, is the inaccessibility of coder time.
Solution: everybody should know how to write code, even at the simplest level.
Blue-collar jobs: they will be obsolete. Many of them already are. The rest are waiting for their turn.
Marketing people - marketing is online. They need to know how to set up proper tracking in JS, how to get atomic data in some form of SQL, how to script some automated adjustments via APIs for ad budgets, etc. Right now they're asking for developers to do that. If they learn to do that, they'll be an independent, valued asset. Employers WILL ask for this as a bonus.
Project Managers - to manage developers, they need to know what they do. They need to know code, they have to know their way around repositories.
QA staff - scripted tests are the best, most efficient tests.
Finance - dropping Excel in favor of R with Markdown, Jupyter Notebooks or whatever, is much more efficient. Customizing / integrating their ERP with external systems is also something they could do if they knew how to code.
Operations / Category Management - most of it would go obsolete with more companies adopting APIs as a way to exchange important information, rather than phone calls and e-mails.
Who would not be replaced or who wouldn't benefit from programming? Innovative artists.
A lot of it might not be now now, but the current generation will see it already in their career.
If we educate people today, without advanced computer skills and some coding, then we are educating future deadbeats.
With all this, all education should include CS. And not just as a mandatory field or something. Make it more accessible, more interesting, more superficial if needed. Go straight to use cases, show its effectiveness in the easiest way possible. Inquisitive minds will fill in the blanks, and everyone else will at least know how to automate a part of their work.
I just startet my masters in CS and I‘m still unsure if I should switch to IT-Security.
Our university plan in CS include some completely off topic stuff, like economics.3
In addition to the programming language or theoretical concepts. It is also essential to develop good problem solving skills.
Concepts like design patterns and refactoring would be better taught using hands on exercises based on a long running example, such as having the students create a project in an introductory course on a programming language and then take that codebase as a starting point for the assignments on design patterns and refactoring.
It would be unrealistic to assume that developers would be working only on a single programming language in their entire career. So, a few pointers on how to go about learning new languages based on similarities with programming language(s) they already know would also be there.
I guess having a standardised documentation, an open-source encyclopedia about programming languages, frameworks, etc...
Drop or be more flexible with the Math requirements. I took every programming course my High School offered including AP CompSci and passed with high grades. I wasn't able to pursue a degree because I wasn't "allowed" to take CS classes without first meeting the Calc 2 prerequisite. I am terrible with Math but programming makes sense to me, I'm good at it, and I enjoy it. I think it's horrible to stop someone from pursuing a degree because of a prerequisite. I understand the Math/CS relationship but being good at math doesn't make you a good developer. Just my opinion, I could be wrong.4
Take the bitter truth @bittersweet told so sweetly.
Add this: If you want great software developers, don't put them into a dark room and teach them the theory of software development. Teach them the longing for the wide and endless space of possibilities.
> Quote after Antoine de Saint-Exupéry
So basically give them practical problems which them to desire the theory. Provide an integration of open source contributions into education. Online and offline.1
I'd teach the basic principles of researching technologies, choosing a technology stack, proof of concepts and reading and understanding documentation. If this is done correctly it's 50% of the project. Nowhere on my CS uni has anybody mentioned these things, and I see other students are failing because they don't understand how to start a project or read docs.
We should teach people early on how to collaborate with others in a team atmosphere. It’s hard to get code into production on your own, and once it’s in production it’s not your code anymore, it’s everyone’s. Everyone should have a say.6
Teaching version control would be nice. Git, SVN, CVS. My work uses CVS, and I still have no idea how to properly fork and merge. My knowledge of Git currently starts and ends with GitHub (sorry but true). I stumbled my way with TortoiseSVN just so I could get a WordPress plugin uploaded.1
WARNING - a lot of text.
I am open for questions and discussions :)
I am not an education program specialist and I can't decide what's best for everyone. It is hard process of managing the prigram which is going through a lot of instances.
Speaking about schools: regular schools does not prepare computer scientists. I have a lot of thoughts abouth whether we need or do NOT need such amount of knowledge in some subjects, but that's completely different story. Back to cs.
The main problem is that IT sphere evolves exceedingly fast (compared to others) and education system adaptation is honestly too slow.
SC studies in schools needs to be reformed almost every year to accept updates and corrections, but education system in most countries does not support that, thats the main problem. In basic course, which is for everyone I'd suggest to tell about brief computer usage, like office, OS basics, etc. But not only MS stuff... Linux is no more that nerdy stuff from 90', it's evolved and ready to use OS for everyone. So basic OS tour, like wtf is MAC, Linux (you can show Ubuntu/Mint, etc - the easy stuff) would be great... Also, show students cloud technologies. Like, you have an option to do *that* in your browser! And, yeah, classy stuff like what's USB and what's MB/GB and other basic stuff.. not digging into it for 6 months, but just brief overview wuth some useful info... Everyone had seen a PC by the time they are studying cs anyway.. and somewhere at the end we can introduce programming, what you can do with it and maybe hello world in whatever language, but no more.. 'cause it's still class for everyone, no need to explain stars there.
For last years, where shit's getting serious, like where you can choose: study cs or not - there we can teach programming. In my country it's 2 years. It's possible to cover OOP principles of +/- modern language (Java or C++ is not bad too, maybe even GO, whatever, that's not me who will decide it. Point that it's not from 70') + VCS + sime real world app like simplified, but still functional bookstore managing app.
That's about schools.
Speaking about universities - logic isbthe same. It needs to be modern and accept corrections and updates every year. And now it depends on what you're studying there. Are you going to have software engineering diploma or business system analyst...
Generally speaking, for developers - we need more real world scenarios and I guess, some technologies and frameworks. Ofc, theory too, but not that stuff from 1980. Come-on, nowadays nobody specifies 1 functional requirement in several pages and, generally, nobody is writing that specification for 2 years. Product becomes obsolete and it's haven't even started yet.
Everything changes, whether it is how we write specification documents, or literally anything else in IT.
Once more, morale: update CS program yearly, goddammit
How to do it - it's the whole another topic.
Thank you for reading.2
Find professors who aren't into this petty behavior and actually urges learning. I read to many rants about professors pulling rank over students because they find the student annoying. My professors knew I had expierence. They allowed me to explore topics that were above most people's heads. Never did finish my degree.
I see a lot of people ranting about programming exams on paper. I acknowledged that not having a texteditor is not ideal. But not having a compiler is essential in testing the students programming skills in the first few courses.To many students are completely dependent on the compiler.
Some students writing C++ code have to try to build their program as many times they have lines because of all the syntax errors they make. Why think about all the ; if your compiler will tell you where they are missing?
As a programmer you should be able to look at (your own) code and be able to tell what the result should be. Of course this has its limits, but in the small exam questions they get in the first few courses they should be able to do that. To many first year students write a for loop without thinking about the starting value and the end condition. With the repeated process of running the program, changing the starting value or the end condition randomly they eventually get to the loop they need.
I think people underestimate the value of an exam without being able to compile or run your program. But I like to hear your reactions.
I haven't observed college to be all that effective at teaching CS. CS education is mostly acquired at the University of Google.com/search?q=%s
Question: exactly got how necessary is a degree anymore for programming positions?13
Throw out or minimize paper tests and teach primarily through projects and the tools and libraries that are actually used.
You can still do the theory, there’s merit to it, but I wish I’d had more experience in my classes with the things employers are actually looking for.
Don't start the first semester teaching racket, especially when you're teaching documentation and unit-testing at the same time.
A few months later it was java's turn (same course), why dont teach that first?1
Give up trying to change CS education since current formal education systems used since the prehistoric times are unable to teach CS properly. Instead, tell the students from day 1: "What you'll learn is either already outdated or will be outdated by the time you graduate. Be ready to learn stuff by yourselves or switch your major."
We here in India are going through a nightmare. We have our CS syllabus from 1990s, we still write lab records, and solve 10 pineapples problem for placement training. Nobody really bothers about actual skill or knowledge, are like sheep behind feed. Passion is taken for granted and overruled by the “experts”.
A good education in CS starts from the hunger to solve problems that would matter to people. Future of CS education is in online courses that give out ideas to generate more ideas and inspire programming not as a subject but as a basic need of the hour. People should love the fact that CS is queer in many ways but is very powerful. Basics are important but the education must hold on to what is currently happening in the world.
World will be doomed when we start making students study the same thing what we did, except it is called Math. A subject has to be dynamic. If anybody agrees what I say, spread it so that world will understand what learning means...
Make CS introductory courses introduce more. Last year I took one in my uni to check out how was formal education in programming. They took an entire semester to teach what I learnt in about a week (about 2 hours a day of dedicated learning). They only taught python, a language you can pick up in about 6 hours of learning. To give you a sense of how slow this course was, they took TWO weeks to teach how lists work. This are university level courses in an institution that pretends to be the best in the country. Fuck that shit, they are incompetent as fuck and treat their kids as 5yo boys.
Fire the teachers who don’t know anything about CS except out of a guide. Make it about CS. Also update the god damn information taught + plus tools used to learn CS.
Another thing is to let people start learning at a early age, not forcing them but atleast offering the option. Like let’s say in Junior High instead of High School.
Many higher-level courses preach about importance of HCI, UX, etc., but not a single class in the program I went through actually touched front-end development.
All the professors I had didn't accept that I have already solid notions about the arguments in their course. I tried to explain I worked in some agency and they invested in employee knowledge but the tilts was embarrassing, they mocks you but systematically when you hit the highest score in the test they compliments for "how well I've studied" when I didn't spent one minutes on studying while I was engaged with more complex and training exams. I wish a degree where you can attend the exam without following the course if I'm already prepared.
I think professors should relate computational processes to mathematical ones more often. This helped me out at the beginning a lot when learning CS through the internet during high school.
I remember that a lot of the computational logic made sense to me because of math.
e.g. functions, comparators, variables, for, and, xor, sets, trees, sorting, searching etc.
A lot of these topics are hard to teach for beginning computer scientists. But I think if professors made the relationship with math from the beginning it would be easier for the students
I dont know if teachers already do this but the first time I had a professor relate math to code was while taking data structures in my second year of college1
Develop the IT culture of students, facilitate speech and ideas. Replace targeted narrow project by problems they need to solve by their own means.
I don't know how it's out there, but where I'm from, we don't get a lot of practical classes. The curriculum has tried to include practical alongside theory but its just not working. All we do is theory and more theory. Maybe include a major portion of marks for practicals rather than theory. And yes, please no coding in paper.
Another major thing we lack is teaching logical thinking. I have met final year under grads who find using a (!foo) to invert the value of foo mind blowing. They would rather use a full blown if-then statement to do the same. I think we need to incorporate chapters that motivates students into logical thinking to make better programmers.
Another essential part CS education around here lacks is in relevant examples and chances for internship. If you're studying something, I believe you would understand it much better if you see and experience it. Curriculum should include a real world project that you would use in a daily basis. Maybe break down and analyse a successful application and its component.
Emphasize secure implementations rather than just making something work...looking at you string concatenating sqli_query's.
More AI/ML at undergraduate level. Drop all those physics and electronics shit or at least make them optional.2
Begin teaching fundamentals much earlier. For me, I learnt Java classes and some fundamentals for it, but more basic programming skills went by the wayside until 2nd year of Uni.
The course we did on logic was good both years, but stuff like data structures and algorithms (sorting, linked lists etc) should be taught first.
Something else that might be useful is maybe not learning Java initially. What annoyed me with that (and I'm sure confused some people) was the amount of
- "Hey what does that mean?"
- "Uhh, don't worry about it yet"
which while it might encourage you to go read about it, is more likely to encourage the opposite, and tend to ask less questions, even when switching language.
I can't say for other universities, but I think a larger focus should be on gaining skills in the field, rather than becoming employable through doing employability things.
I know plenty of second year students that still couldn't have completed our first semester first year assignment, which was essentially some object manipulation wrapped up in a few classes and a basic console I/O.2
I'm sure like a lot of Devs of my generation, CS education didn't really exist when I was at school. All my knowledge has been self taught over time.
I think the best thing you can have is a good mentor and the opportunity to learn from your mistakes.
Half of the courses we had in our college were about electronics. Except Microprocessors and Transistors, it's not relevant.
We even had chemistry and engineering drawing. So we essentially wasted more than half of our time.
Besides languages, weren't taught anything about real world software development.
Nothing about how to work with an existing code base, version control, design patterns, system design, creating a website, debugging, functional programming, scalability, reliability.
The industry should be involved in setting the syllabus and also contributing part time teachers.2
Remove it completly. There is no point in forcing it on children, governments are too slow to deliver a proper education plan that is not horrible outdated and proper coding teachers are non-existant.
Instead they shoul focus on STEM and provide computer clubs that are not based around grades and education plans.1
Haven’t learned in a classroom setting, but am learning from multiple online sources and it would be way more helpful to teach thought process and practicality than syntax nuances.
CS education should start in elementary school....main topic: netiquette
"People" just write too much shit wherever possible...4
Stop making students program a specific way
Requiring 20 if-statements instead of a switch statement1
The problem is not just the academe, but also the students.. they only choose CS as a scapegoat for bar/board/licensure exams, or they heard it was one of the highest paying jobs or ITs have the opportunity to work from home or on a google-like working place.. without even thinking whether they really like computers or not! We are being contaminated with bunch of xxxxxxx(i cant think of a word to describe them) .. Let's filter them freshmen and give them hard maths or design exams before entering CS
My school did that and it helped firing the worse teachers I got :
A simple poll on every course taught during the three year.
[Gonna be surely a long rant since some testimony below]
The previous prom before us got a teacher that went nuts, like the first and only lesson classes was like "Okay so if you don't understand my lessons, you get out. I don't want any question." I'm not kidding.
So since he wanted to teach researching stuff, they had only 4 hours of lessons, and the other classes were to research.
At the exam, he went nuts again and were saying people did shit, saying that they are shit, etc.
Worse is, if you happen to have to do a catch up examen with him, you had to implement in 4 hours a program that took at least 20 hours of research.
But at the end of the year, students got asked with a poll how each classes of the year went. All the prom gave the feedback that was deserved.
The next year, wiht my prom, the teacher was extremely kind with us, but we all knew that was because his job was compromised. (And if I'm not wrong, he doesn't do that course anymore for engineers, fortunatly.)
My biggest dream is to study at CMU, but I already have master degree and I'm not in US. So the chance is very rare.😖1
I think it would be nice to see less contracts with those companies which only have in mind barebones training and profit. That kind of relationship between institutions drops the standards and it's expensive af. Those who sells cheap computers and bad software and charges more than ten time their value, those with enough power and influence to bend every single rule...
That kind of companies shapes the industry according to their needs, and will never give a shit about anything but the next semester. They teach you to be just a bit more than a user, they charge you like if they were really teaching science.
You end up full of debt, self taught on the technologies that matters, and accepting jobs on projects as outdated and mediocre as the "educational plans" you paid thousands for. And all that just to get a piece of paper signed by a stranger who doesn't care about you, and enjoyed by a corporation which wouldn't even consider to hire you because they know what they sold to the education department.
Fuck this, today I hate it all.
Have a general class about problem solving. Too many people are unable to understand the problem input, the problem output, and how to break that problem down into steps before sitting down to code.
Like fuck, the biggest issue here isn't that students don't know how to code, it's that they can't fucking solve a simple problem2
Spending more resource on problem solving rather than investing on programming languages. Train people with useful projects rather than small snippets.. Both of these will prepare them for the harsh reality..
Also focus more on how to deal with the business side of product development, how to 'deal' with sales/operations in a professional environment.
During my education the focus was mainly on the pure software engineering side, not so much on the 'real world environments'.
Personally I have no problems dealing with other departments, but some of my colleagues do struggle with the daily 'confrontations' between product development and operations.
As this weeks rant is about how to improve CS education I want to share one new university in Berlin called CODE that does many things quite differently:
From the beginning students are working together in small interdisciplinary teams on projects. Meaning software developers, interaction designers and product managers are all already working together. The projects are developed in collaboration with companies and usually last a couple of weeks to multiple months. The students are supposed to learn more if they are faced with an actually problem instead of learning with frontal teaching (“Frontalunterricht”) in a lecture hall.
The founder himself started programming in his teens but studied business administration because he found that the CS courses had an outdated didactic.
PS: And if you are in Germany and between 15 and 21 years old have a look at the “Code+Design Camps”. They are basically longer Hackathons (4 days) with professional mentoring from programmers, designers, … from the industry. I attended four in total (all over Germany) and they were a lot of fun!!!
What do you all think about this?
English Article: https://global.handelsblatt.com/com...
Some Articles in German:
Have at least a year long module on Data-Structures and Algorithms. It is the best thing to do for interviews and helps you think like a programmer im general.
I'll remove some courses - make some optional and some courses mandatory.
I'll explain- I did my B.E. degree in I.T. I'll remove some courses like the ECE subjects (Digital electronics , Communication Theory) - something I'll never use. If I will - I can learn it at that time. Some mandatory courses like DBMS, OS etc. And some optional ones you can take according to your passion like - security courses or scalability courses etc.
The ocr a level in the UK is properly messed up - it's beyond outdated and irrelevant, with very little programming involved. The GCSE is even worse - this year they literally removed all programming (coursework) - like how is that supposed to teach you anything relevant? The GCSE from the year before was much more relevant, though still not perfect, as it had much more of a focus on programming and development. But hey, what can you do? The education system will do what it wants. All we need is to get people from the industry to create exams and the syllabus, to help ensure they are more relevant. I ranted on a bit but hey, hopefully we can change it for the future generations, as I find there are very few kids interested in programming these days. Here's to change
Flowcharting actual computing processes and using flowcharts to code. For someone who is more visual than logical like me, it helps as guide to code and it also serves as documentation to clients.
Stop giving us assignments that are meant to remake old stuff (like "construct a Turing Machine Simulator" or "Make a compiler").3
I don't have any experience in teaching, but I'd venture to say that teaching anything is hard. For most subjects, teaching has been refined over thousands of years to be easier and meaningful. Not CS. As has been mentioned by many people CS is a very new subject when compared to the likes of maths, for example, and education systems haven't been able to cope with it adequately (nor should they be expected to).
That the CS industry is rapidly evolving certainly doesn't help matters, but in reality that shouldn't really be that big of a problem (at least in earlier years of education). The basics of computer systems and programming don't really change that much (please correct me if I'm wrong) and logic stays the same. Even if you learn stuff that's a bit out of date it can still be useful and good lessons should be able to be applied to new technologies and ideas.
Broken computers is a big inconvenience, but a lot of very useful things can be done without a computer, and I should think the situation is a lot better than it was 5 years ago. What I think would be good, instead of trying to use broken computers would be to get students to set up and use a raspberry pi each; you learn about something other than windows, learn how to install an OS and you don't need that much computing power for teaching people computer science.
I think the main problem is a lack of inspiring teachers. Only a very few teachers will be unable to get you through the exams if you put in the effort, but quite a lot of the time students don't put in the effort because they can blame it on the teacher.
My solution would be to try and get as many students into computer science as possible and the rest will follow: more people will become teachers, more will be invested in the subject, more attention will be payed to the curriculum.
That's not to say I don't agree that many of the problems that have been mentioned need to be fixed for CS education to work properly, just that there is no way that I can see to fix them currently without either creating more problems or some very rich person giving a load of money.
This has gone on a lot longer than I expected so I'll stop now.12
by eradicating every form of competition or anything which is close to making any student feel inferior
That moment the client want the job done with php with lots of advanced features and security.
In no time, I just claim to be an internet marketer.1
For the first year or so, for me at least, I found that loads of my classes didn’t teach much other than rote learning. Loads of this does that, here’s an example code to look at. I bet most of us would’ve learned quicker if we got to play with the code and figure stuff out yourself.
Leverage online code platforms for exercises/assesments. Something like qualified.io for educators.
Teach algorithms with code challenges with sample test cases. Builds confidence, makes learning fun, and gives immediate feedback.
Stop teaching c/c++ ,start from python and java and teach us to contribute in (open source ) github .18
Start teaching as early as possible. Cut the repetitive ICT courses too, and put teachers who know more than 'This is Word and how you open the internet' in the front of the class.
Also, there should be more extracurricular things that focus on CS. Maybe have a once-a-week meet-and-hack, or a hackathon every semester. We have something like FIRST Robotics here, so why not more of that? Just something to engage children more and provide more opportunities for them to discover CS in the classroom.
There are son good page for improve your CS Education for example https://www.udacity.com is perfect, with some program like nanodegree you can study an present you software and work with company that like your project
having computer sience decans who can actually program well and can explain why they do things a certain way. accepting OOP and procedural code.
-good exercise systematic approach to problem (breaking down problem in to smaller workable pieces)
Far way better than text book based boring classes