DEV Community

Louis Frankel
Louis Frankel

Posted on

What are the skills that a public school Computer Science teacher should possess?

I am a middle school English Language Arts and Computer Science teacher in Brooklyn. The New York City Department Of Education has been trying to transition some of its teachers into teaching CS, as the official pathways into the classroom for industry professionals are scant. There are lots of teachers who want to take this opportunity, but the training options are often limited to companies who simply explain how to use their platforms (Code.org, Codesters, etc). It's not a bad deal, but I think I can do better.

I want to teach other teachers how to teach children how to code. What do you think teachers should be teaching, and what do you think children should be learning?

Latest comments (41)

Collapse
 
menninelena profile image
Elena Mennin

This is and interesting topic. Teaching teachers, huh? Well, in my opinion, someone who's already teaching has to be good at it and obviously always improve and stay updated on new tecniques. And children what school offers now is good program and I wouldn't touch it. I would get more oral tests because writing is not relevant anymore since you can order it on this page.

Collapse
 
repollo profile image
repollo

Wow, this seems like a really broad question, though I only posses opinions on the matter, I feel strongly about people acquiring the skills for the next steps and/or rather the future blossoming industries in programming development. For me is about O2O, machine learning and API interconnectivity.

Before I start explaining myself let me just say, even though I studied engineering, it was rather difficult to find how to implement my programming skills into real world applications(practical), since I was taught in from a theory perspective. I dont know if I've ever gone through a day without going into StackOverflow. We all need answers, and for programmers this is where we get them, instead of reaching for a book on all the theory behind a specific Programming Language.

So back to the reasons on focusing to the new and upcoming tech industries, O2O, Machine Learning(AI), and blazingly fast frameworks and databases are all the rage now a days inside and around dev's communities. So tying to grasp the ideas behind it would be a plus for upcoming young people. One of the fastest and easiest ways to enter into this realm I feel is Python(programming language), Redis(database), django or flask(web frameworks) and swift for programming simple apps in iOS. This are really simple to use and the latest in web apps developments which O2O is all about. For machine learning theres a lot of videos weekly coming up in youtube, with all its info, but python seems the way to go.

One project that may cover much of this things has been published and is well documented, is only 30 hours, but "maybe" it can be reduce a little bit more. It's called UberEats and you can find it at code4startup.com/

Leo Trieu is really cool explaining lots of the in and outs for this project, not trying to publish his work, but I feel strongly that lots of info from that project of UberEats, may be a good and interesting start for new and upcoming youngsters trying to understand and get into code.

This question even though is broad, still is a really good question not only for teachers but for everyone, since we are starting to get into a new generation for life that depends completely in the understanding of programming languages. Sadly the programming language literate is a really small bunch out of the whole continents with access to good computer resources. More and more the separation of people who code and people who don't grow steadily which at this point is worrisome, since we don't even know how life is going to be in 5 years from now. If society is worried about how robots are going to take over simple task jobs, then they should be more worried about how O2O is going to take over all transactional services and retail services, which of today is the biggest industry yet, e.g. Walmart. For me I did gave my opinion of the matter, but the reality is that ALL people no matter what age, NEED to learn to code. That simple.

Collapse
 
rrackiewicz profile image
rrackiewicz

I personally favor the language agnostic point of view in favor of someone who can teach what really goes on in side of a computer. Basically, a first principles approach to computer science. We have an overabundance of programmers in this country that ride the wave of hot technology/languages, and a severe underabundance of programmers that first and foremost understand how computers work and choose the best technology/language to fit the requirements of the job. The former will also struggle to find meaningful and continuous work. Get kids excited about computers, not hot technology and languages. The rest will fall into place.

Putting the grand plan aside, if I had to pick a few simple languages to teach beginners, I'd favor Scheme for functional programming and Python for OOP (there's only one way to do it).

Collapse
 
codeforcashbook profile image
Zack Burt

I sent this to my high school computer science teacher, Josh Paley, and he sent this:

There is a big difference between teaching CS and being a professional programmer. There is also a difference between teaching CS at the high school level and teaching it at the university level. Some issues include:

  • Bottom line: The job of the high school CS teacher is all about getting students to learn big ideas and to generate enthusiasm.

  • A fun classroom environment cures many ills. (I don't think any of the commenters addressed that.)

  • Building relationships with students so they like the teacher is enormous at the high school level. If they like you at least a little bit, odds are they will try hard. (This can be more difficult to do with larger class sizes.)

  • Minimize take-home homework. Students can do plenty in class.

  • Things like testing and debugging methodologies are critically important to learn, but I worry that they are a fantastic way to get high school students to fall asleep. There is no reason that I can see for such things to be dwelled upon in detail in high school. Much better to delegate that to the university level or industry.

  • There is a difference between choosing a language for learning purposes and choosing a language for professional work. Teachers need the former. What are the big ideas that high school students should be taught? What barriers are there to learning big ideas?

After all these years, we still use Scheme for a first language at Gunn. Given the feedback I've received, I wouldn't change that at all.

Regards,

Josh

PS: We now have about 330 students taking CS classes and next week there will be a presentation to the PAUSD Board to make CS mandatory for graduation. Times have changed. :-)

Collapse
 
mdziubiak profile image
Marian Dziubiak

There's a ton of great comments here, so I'll be short.
First, like many said, apart from just programming you need to get your students to solve problems by writing algorithms (even on a piece of paper). This will introduce them to a different way of thinking - step by step. (There's a cool video on YouTube where a father asked his kids to write him an algorithm on making a pb sandwich)
Second, JavaScript and Python are great languages but kids need something that will show them results, which I guess JS kinda does. My first language was Visual Basic which has a very nice "English" syntax and it's mostly about setting up a form, drag'n'droping controls onto it and setting their behavior. Then in middle school we had Logo and where giving commands to a little turtle that drew on the screen.

Collapse
 
oyagci profile image
Oguzhan Yagci

Here is how it works at 42: you learn to learn. We start with a low level language (C) and are only allowed to use syscalls like 'write' or 'read' for our projects. That way we understand what truely happens when we compare two strings, or how does printf works.
Then, as our assignements get more and more complicated (reading a line from a file, recoding a shell, recoding malloc, coding a kernel, etc...) we found ourselves understanding higher level concepts a lot more easily.

But the main thing is that the language or whatever algorithm is not important. What truely matters is the ability to understand what is going on under the hood and to be able to teach yourself how does it work.

Collapse
 
s1037989_90 profile image
Stefan Adams

I taught a single semester intro class at a high school and we used PLTW (pltw.org) as the curriculum. There's some things I might do differently, but all in all I think they were pretty good.

Collapse
 
k2t0f12d profile image
Bryan Baldwin

So, Software Engineering and Computer Science are overlapping, yet separate domains. The objective of the domain informs the things to which you expose your students.

I take Computer Science to literally mean the science of computational hardware. Knowledge of transistors, bits, bytes, registers, buses, CPUs, FPUs, etc etc. Programming could be useful to introduce students to the inner workings of computers, but not with any of the tools that have been mentioned. Browsers, scripting languages, and markup languages communicate absolutely nothing about the inner workings of a computer.

I teach my son C because he can do it. I'm not sure that's a good fit for a class. If it isn't fit for you it isn't going to work anyway.

But there is a better option. Something like BASIC running on a MOS 6502 CPU (which you can simulate in a Commodore 64 emulator). BASIC was specifically designed to be super simple while exposing the most minimal micro-processing environment that you don't just control with programs, but also configure by directly accessing memory addresses that control its features.

Collapse
 
andy profile image
Andy Zhao (he/him) • Edited

I can't say much for the code/CS part of the "what to teach/what students should learn," but for soft skills there are some things I am always trying to improve. I'm a teacher assistant for a coding bootcamp, and primarily work with adults who are transitioning from a totally different career (usually) to a CS career. That being said, maybe my advice isn't too relevant.

My main focus is to aid the learning process, and with that in mind, here are the main things I work on during class:

  • Being overly specific. During the first few weeks of classes, I find myself repeating a lot of different things like, "Open your server, which is in your Terminal, and look for the params hash", "What do you think no method for nil:Nil class means?", or "In your Sublime text editor, you can find the controller folder under the app folder."
  • Also being overly specific when trying to understand their questions. I'll make them ask the question again but with more detail to make sure they understand what the problem is. While it helps me answer their question, I'd say 70% of the time they answer their own question.
  • Over-explaining a concept to make sure all gaps of knowledge are covered. I've had some questions where a student told me they understood xyz concept, but if I explained it anyway they would have an 'aha' moment like: "Oh! So ProductsController#index was pointing to the index method in the Products Controller!"

Those are some things I work on, and while I don't have that much experience teaching, I would hope that other teachers do simiar things.

Creativity is definitely key for learning. The more inspired students are to be creative, the more likely they will reach a solution to a problem or take ownership of their projects.

Also, definitely agree with project-oriented curriculum as opposed to testing.

Not sure how you currently manage the classroom and curriculum, but repl.it has a classroom management tool for students: repl.it/site/classrooms I'm always thinking about learning + CS and their tool caught my eye when I first saw it.

Anyway, hope you didn't mind reading this long comment. Thanks for doing the good work of furthering education!

Collapse
 
louisf profile image
Louis Frankel

This looks great; thank you!

Collapse
 
meelijane profile image
Amelia Schmidt

Debugging, autodidactic learning skills like "how to google", version control, internet and personal computing security, password security.