Showing posts with label computing. Show all posts
Showing posts with label computing. Show all posts

Saturday, October 24, 2026

AI Is Getting Scary

Recently on Facebook, slider puzzle games came up in discussion. I remembered writing a program for playing one of those games and decided to see if I still had one. I did find one. It created a form and let me easily move the "boxes" around. It didn't 1) check to see if everything was in the right place 2) shuffle. So I decided to add those features. Enter GitHub Copilot which is built into Visual Studio.

I started writing an if statement in the appropriate place and Copilot offered the option to call a method called CheckWin. OK I let it finish.

Obviously, I needed CheckWin to be written.  I started writing "private ..." and it offered "bool CheckWin etc." so I let it create the method to see what it came up with. What it wrote works fine although not the same as I would have written it. But ok. CopIlot sure did do a good job of anticipating what I wanted.

My  next step was to add a shuffle method. I started writing "private void Shuffle" and it offered to write the method. That it did pretty much as I would have. So in a few minutes I had everything I needed.

Not sure how I feel about this. How did it figure out what I was up too? Does it have sort of understanding of the words I am using?

Of course, I am working on well-known, established, and simple programming here. There are probably dozens of examples of code on the Internet already that handle these sorts of puzzles. I am not asking AI to do anything new or innovative. Just how useful would AI be if I were working on problems no one has seen before?

None of this is perfect though. Some of the variable names, both that I wrote and that AI wrote, are not particularly informative. I assume I could ask CoPilot to rename things and I may do that. I do believe that the human touch in selecting names may be better than what AI comes up with however.

When if comes right down to it, I will probably not really understand the limits and abilities of AI until I decide to tackle a non-trivial and innovative project. And that is going to take some effort.

Monday, August 03, 2026

Computer Science is Not Just Coding and Its NOT Dying

The discussions about the future of computer science and of computer science education are unending. We are seeing huge numbers of layoffs in the tech industry as coders are (attempted to be) replaced by artificial intelligence. Universities and high schools are seeing drops in signups for computer science courses as students don’t see the same economic future in coding that they once did. Some are trying to counter the “CS is dying” narrative. For example, the two opinion pieces linked below.

Much of this is self-inflicted. Far too many people, especially in politics and in school administration roles have pushed computer science as vocational. Dare I say, as JUST vocational. Now in a career technical school that pretty much made sense. For comprehensive schools, I maintain, that it never made sense.

I have been saying for years that we don’t teach physics because we have a shortage of physicists. Nor do we teach biology because we have a shortage of biologists. Rather, we teach those subjects, and many others, to help students to understand the world in which they live. That is the reason why students still need to learn computer science.

We need to change our messaging. No, that’s wrong, I think that computer science educators have always tried all along to promote CS as more than just vocational. That message has just gotten lost in the noise from people with louder platforms. So not “our message” but the message that the wider world is hearing.

Coding is still a language of computer science. It’s not going away. We’re still going to require coding knowledge in the future. It will probably not be the main thing in a job but understanding what AI is doing is going to require some knowledge of the language of computing.

Logic is still important. It turns out that expressing logical expressions in computer languages is still a good way to learn things. Coding is still a good tool in learning about abstraction and breaking a problem down into smaller parts and assembling building blocks of processes. Understanding how computers work and how they communicate and how they tackle problems is still basic computer science. AI does not make the need to understand those concepts go away.

If one thinks of computer science as little more than writing code it is understandable to think that learning CS is less valuable. On the other hand, if one understands that computers are going to be increasing in importance and impact on society AND that CS is about what makes AI work than CS is more important than ever. Students who enter the workforce without an understanding are going to enter it handicapped and limited.

Computer science is alive and growing. It is growing in complexity, in influence, and in the need for people to understand how it works. Students need computer science education.

Monday, July 13, 2026

CSTA 2026 Day One

CSTA 2026 didn’t start until noon today so I spent some time exploring. I wandered around the French Quarter. Bourbon street is not the same at 8AM as it is at 8PM for sure. But I found some good food and am snacking on a beignet as I write this up.

I snuck into the exhibit hall before it opened to take pictures of some of the booths. They’ll probably wind up in a blog post after the conference. While snooping around I was able to talk to one of the outstanding people in computer science in education -  Mitch Resnick from the MIT Media Lab.

I took a workshop with him about Scratch a number of years ago. He was nice enough to let me get this picture. Mitch is the person behind Scratch and Octostudio. I was able to talk to Mitch for a bit which was great. We talked about tools with low floors and high ceilings. We also talked about letting students get creative and have fun while learning..

Getting to talk to people is one of the best things about CSTA! I have connected with many friends and talked to a lot of new (to me) people. That’s been great

I went to a couple of sessions. I spend half of an hour with two physical computing . One of the Robolink Codrone and one on Micro Bits. Both are interesting. Drones are more expensive but I think they may attract some students that micro:bits might not. I was looking for a bit more innovation because I have seen both of these before. I’ve owned and used micro:bits as well. I think that these session were very good for people who are not as aware of these tools. I do think they are both pretty cool. If you have the money for them I can see them driving interest.

Next up for me was a session on MakeCode Tutorial Editor. This one was very good. It was hands on and the handout has an exceptional number of useful links. The Tutorial Editor allows a teacher to create their own tutorials for students to use to learn hands-on with MakeCode. We did some work in the session using AII tools to write the tutorials. I’m pretty sure I want to learn more about creating tutorials “by hand” though.

BTW MakeCode and its variants is a development environment that allows students to program with blocks, JavaScript, and Python for small arcade devices, micro:bits, and more. If you haven’t checked it out yet your really should.

The opening keynote was pretty good. I was mostly interested in Jake Baskin’s part of it though. He’s the Executive Director of CSTA and he talked about the state of the association. I need to think about some of it to see if there are places for me to get more involved. One highlight was his talking about a new definition of computer science. Always good for a discussion. Anyway, it is:

Computer science is the study and human-centered practice of using data, algorithms, and computing systems to solve problems, make discoveries, and express ideas.

Jake emphasized the term :human-centered.” I really like how he made the case that students need to learn computer science, perhaps even more so, in the age of artificial intelligence. I expect to hear more about the future of CS education from more people over the next several days.

Saturday, June 13, 2026

What is wrong with this button?

Recently I was going through my memory box and I cameA button displaying the message The Spirit of 100110 across this button. It was given out by the hundreds at a conference in the 1970s. . What is the spirit of 100110 you ask? That represents the number 38 which doesn’t seem to mean much. And it really doesn’t because that is not the number that was supposed to be there.

Who ever was in charge of printing the buttons left off a zero where the period is located. That dropped the value in half to 38 when it was supposed to represent 76. Yes, this button was intended to honor the 200th anniversary of the signing of the US Declaration of Independence.

My guess is that the Binary number was meaningless to the person who proofread the button. Clearly, not a computer person.

This brings me back to my regular comments about the need for teaching computing foundational concepts. Sure, this button thing is fairly trivial but Binary concepts and indeed number concepts are pretty important for many things beyond programming.

Boolean algebra is another concept that is foundational to computer science that shows up in many areas. Foundational computing concepts are essential knowledge for people to understand the world around them as it exists today and how it will develop in the future.

I’m probably preaching to the choir here but I feel like somethings need repeating. The button is a fun story too!

Tuesday, March 03, 2026

Computer Programming or Software Development

My friend Pat Yongpradit has a post on LinkedIn that got me thinking. It starts with a key statement “Computer programming (coding) is not equal to software development.” Now I tend to think of those as similar if not identical but Pat points out that “Computer programmers and software developers are codified differently in the BLS data” BLS is the US Bureau of Labor Statistics BTW.

Interesting. So what is the difference? Computer programmers write code. The BLS describes computer programmers:

Computer programmers write, modify, and test code and scripts that allow computer software and applications to function properly.

Software Developers do more. The BLS describes software developers as follows:

Research, design, and develop computer and network software or specialized utility programs. Analyze user needs and develop software solutions, applying principles and techniques of computer science, engineering, and mathematical analysis. Update software or enhance existing software capabilities. May work with computer hardware engineers to integrate hardware and software systems, and develop specifications and performance requirements. May maintain databases within an application area, working individually or coordinating database development as part of a team.

‘A lot more words in that second job description. The BLS projects growth in the need for software developers and a decline in the need for computer programmers. I’m not so optimistic. My read on many of the layoffs in tech companies appear to me to be more about declining numbers of software developers. I could be wrong and maybe there are/were a lot more people just doing computer programming than I think. The industry keeps changing.

In my very first software jobs, back in the late 1970s, I would characterize my work under the software development description. While I did do some programming from specifications and design documents written by others (computer programming) I rapidly moved into meeting with users, analyzing needs, and designing and developing software and utility programs. Job titles may have been different but that was the work.

What may happen is that software development involves less coding than it has in the past because of AI. At least coding by humans. So BLS is probably right about a decline in the need for computer programmers. At the same time, if software developers spend less time doing actual coding they may have more time for higher level (if that is the right term) thinking and involvement in design. Unless AI starts doing more of that. So maybe we will not need more of them. Or perhaps AI will make it possible for more people to be software developers who wouldn’t be that now. We’ll see I guess.

My undergraduate degree is in Systems. One of the goals of the program was to train people to interface between most people and computer systems. In other words, to understand the needs that people/businesses have and translate it into what computer programmers need to know to write software. For a long time, that sort of work involved two sides and sometimes three. That is to say, sometimes there was a user/client, and analyst, and a programmers. Sometimes the latter two roles were one person.

Knowing how to write code was always essential because code is the language of computer science. Not knowing how to code was seriously limiting for someone trying to design software. I think that is always going to be the case at some level. So I think software developers, even those who prompt AIs, will always need to know some coding. More than just coding though, I think that students, anyone who is going to interact with computers and that incudes, of course, software developers, needs to have a background in computer science.

Computer science is not just coding but having an understanding of how computers work. What is computer logic? What is computational anyway? AIs have a lot to learn and people with a computer science understanding are who AI is going to learn from. We need to think of K-12 computer science as computer science – foundational ideas and concepts – and not just a class in how to write code. We need to prepare people to be software developers not computer programmers.

Mike Zamansky has a couple of recent posts on why CS still matters in schools that I think are worth a read:

Interested in seeing what the BLS thinks of employment changes because of AI? Check out Incorporating AI impacts in BLS employment projections: occupational case studies

Monday, February 23, 2026

Who Is Driving Changes to Computer Science Education

There are a lot of Changes happening at code dot org The Slashdot article linked there lists several of them. While the changes include a number of people changes including President Cameron Wilson stepping aside, Chief Academic Officer Pat Yongpradit leaving to join Microsoft, and some staff layoffs the change in direction, to AI, may be the most concerning. From Hour of Code to Hour of AI? Some interesting comments follow that post.

The questions top of my mind are "who is driving the direction of CS education" and "is CS education moving in the right direction?" A lot of people believe that industry is pushing CS education in the direction of being vocational. The new focus on Artificial Intelligence often feels like a vocational direction.

My involvement with computer science education predates code.org and even CSTA so I have seen a lot of changes. In my first teaching days computer science teachers were pretty isolated. There was SIGCSE which accepted K12 teachers though welcomed sometimes felt like aspirational rather than actual. ACM, of which SIGCSE was and is still a part, was doing some support for CS education. Cameron Wilson was a huge part of that and worked policy.

CSTA was developed by some wonderful people in and around ACM. This started the real movement towards expanding K12 CS education. CSTA helped train and organize teachers to push for more more CS education. Code,org came a bit later and brought something new to the effort.

Code.org brought money and industrial production values. From the first set of videos that went viral to some very good curriculum resources as well as connections to industry and political leaders. Getting policymakers to push for CS education stepped up.

We’ve come a long way.

Coming back to my earlier questions. Is industry driving the directions that CS education is moving? A lot of people think they are. Industry has money and it has funded a lot of the work by code.org and CSTA. The modern Golden Rule is that the people with the gold make the rules after all.

Industry has some motivation here. I spent a few years working at Microsoft myself where my job was to promote the use of Microsoft tools for teaching. I didn’t get much in the direction of what to teach. I always felt that teachers should decide what to teach and I just wanted to help teachers find ways to use tools to teach those concepts. Teaching computer science as vocation was always there though. Senior mangers often told me that industry needed more people to know CS because there were jobs that needed to be filled.

CS as vocation has always been a selling point for CS education of course. It’s what helped sell school boards and other elected officials. Among teachers that was usually a secondary motivation. For a lot of teachers, including me over time, CS education became more about understanding how the world works. We don;t teach physics because we want to make more physicist. We teach it so that students understand the world around them.

People who are not working for tech companies often have to use computers and make decisions about computing. From spreadsheets to databases to internet searches. And now AI. People in all walks of life use computers. Understanding computer science can make those people more efficient. Computers are an important part of our world.

It seems like all the big tech companies are betting huge sums of money on AI. There is a lot of pressure to move the direction of CS education into AI. Is the industry push vocational in intent? Is is all about helping these companies to make money? CSTA and code.org are both pushing AI these days. Is this because of industry (gold making the rules?) or would it be happening independently?

That leads to the second question – are we moving in the right direction? I think that question may be different for K12 and for university. Personally, I still think CS education in K12 should be about understanding and not vocational. Someone else can address higher education but K12 should be about preparation for life and not for vocation at least in comprehensive schools.

So is AI the right direction? I think it is indisputable that AI is important to learn. Students should learn prompting and they should learn what AI can and cannot do, They should also learn how to think about what AI should not do. They need to know something about how AI works and that is core computer science.

I think that computer science, in the old analogy, is the dog and AI is the tail. The tail should not wag the dog. Making AI the focus at the expense of basic  computer science would be a huge mistake. We do have to teach the basics that make AI possible. Students need to understand where AI comes from and where it might go. Understanding code is an essential part of that understanding.  There is always going to be more to CS than just AI. We didn’t stop teaching arithmetic when calculators were invented. We should not assume that AI code writers mean we don’t have to stop teaching basic computer science.

CS in K12 should not be just vocational. Is industry driving CS education? I fear they may be. Are we moving in the wrong direction? Maybe. If so, it will be up to educators to provide some course correction. 

Monday, January 19, 2026

Funding for CS Educational Tools

Mark Guzdial posted a link to an interview with Jens Mönig. Jens is the main person behind Snap! which developed out of Scratch (which Jens worked on). It’s a great interview and I recommend it. The story of Snap! is an interesting one. I think it is great that SAP is funding the team behind it. This blog post, which sort of rambles a bit (sorry) was inspired by that interview.

There are basically two and a half ways that software for teaching programming and computer science are funded. One is research funding. Usually by universities but sometimes by research groups that are part of major companies. The later is the half I refer to. The other is commercial products. I.e.. products that actually make money for companies.

The problem with commercial products is that they are really designed for professional software developers. That means a number of things that are great for professionals but harder for beginners. Complexity is one of those issues. Visual Studio, which I use for my own development and used for years in the classroom, using a number of different files for every project for example. That’s just the beginning. Development on professional tools adds features for professionals but often subtracts features that are helpful for beginners. I first ran into this when Visual Basic became Visual Basic .NET and arrays of controls when from intuitive to complex with extra code necessary.

Commercial software often has free versions which is the only way schools can generally afford to use them. Simple versions that work on a school’s limited resources tend to go away over time though. They don’t pay for themselves.

I have seen other cool tools from commercial tools, or tools commercial companies provided for free, disappear over the years. Corporate research projects generally last while the principle investigator remains interested and can keep getting funding. If the research doesn’t wind up in a commercial product that doesn’t help with funding.

App Inventor is an exception. Originally developed at Google, App Inventor had an academic sponsor (It resides at MIT these day) and Google provided some seed money to get the open source version started. It phased easily from corporate research to university research.

MakeCode (largely a Microsoft Research project)  is still going strong. It appears that industry/ academic cooperation is helping keep that going. That combination seems to be key in keeping some projects going.

University research projects tend to last longer than corporate research projects. As long as someone can get grants, usually tied to graduate students coming up with good research topics involving the tool, they keep going. I wonder how well some these will continue when the principle academics lose interest, retire, or pass away. Some projects have depth of involvement which is helpful.

 Alice out of Carnegie Mellon has been going strong for 30 years even though it’s originator, the great Randy Pausch passed away in 2008.  External funding, required for most academic tools has stayed strong for Alice. That takes a lot of work to maintain of course.

Most of the long lasting tools have some level of corporate sponsorship. Oracle helping with Greenfoot and BlueJ are other examples.  There used to be a lot of NSF (US National Science Foundation) money around. Somehow I suspect there is a lot less of it these days. It’s risky to depend on it as well given the rapidly shifting state of US Federal funding.

And then there is Artificial Intelligence to think about. That’s sort of the elephant in the living room these days. If funding agencies (government, non-profit, industry) decide that coding is dead because of AI what happens to funding for the tools educators are using today?

I don’t believe that coding is dead but I know that some people have decided that  it either is or soon will be. Computer science education is going through a change caused by the winds of AI. Industry seems to think that they don’t need inexperienced software developers. Development of developers has to start somewhere though. One can’t go from zero to experiences expert without starting somewhere.

I believe we need good teaching software. I hope we can keep seeing good things supported and developed in the future. We live in interesting times.

Note that Mike Zamansky wrote a riff on this post. Recommended at Funding for CS Educational tools - C’est la Z

Friday, January 09, 2026

Binary Math–Subtracting by Adding

Some of my readers who have been teaching Advanced Placement Computer Science (APCS) will remember the BigInt case study. It was a case study involving mathematics using large (very large) integers. As released by the College Board it supported adding, subtracting, and multiplying large integers. You will notice that division was not included. In fact, asking students to implement division was part of the exam.

BigInt introduced the idea that multiplication was actually multiple addition. By extension, students were to figure out that division is multiple subtraction.

Computer science really requires understanding how mathematics works at a deep level. It becomes obvious (one would hope) when trying to understand how Binary, Octal, and Hexadecimal work. We don’t often spend much if any time trying to understand subtraction though.

Recently, on BlueSky I can across a message by Andrew Virnuls linking to a blog post titled Two's Complement and Negative Binary Numbers that explains subtracting by adding negative numbers.

Let me draw the two previous notes in this post together with some history of mine. Back in my university days I worked on a course connecting some test hardware to a computer. The computer was a Digital Equipment PDP-8. Now the 8 was an interesting machine. It didn’t have a hard drive and it was programmed in assembly language entered in Binary. Where as most computers we use today use hexadecimal representation (base 16) the PDP-8 used Octal (base 8). The word size was 12 bits. Not 64, 32, or even 16 – 12.

This word size places some limits and one of those limits was the number of machine language/ Assembly language instructions. There was no multiply, divide or even subtraction instruction. We had to write code to do those things similar to how code was written in BigInt for those operations. We also had to write code to do subtraction. There was an instruction to create the two’s compliment of a number though. That was handy. So we wrote code to find and use the two’s compliment of a number in order to do subtraction.

We used the subtraction routine to implement division. Though to be honest, we tried to avoid having to do multiplication or division in our project to keep performance reasonable.

I think we’re all glad that today’s computers have a lot more layers of abstraction than the PDP-8 had! Of course, and a lot of students do not realize this, most powerful assembly language instructions are actually the result of what is called microcode that works transparently behind the scenes.

We keep moving up the path of abstraction. Hal Berenson addressed this recently in a post called 98% of Developers can’t program a computer which is actually a bit of a success story including how artificial intelligence is helping with higher levels of abstraction.

Saturday, December 27, 2025

AI Written Code and Making Assumptions

I’ve been writing some code for my own amusement the last few days. I have happily using Microsoft CoPilot to help me out. One really has to be careful with prompts though. CoPilot loves to make assumptions about what the developer desires. Often, it assumes correctly. Often enough, it assumes incorrectly.

I spent a good bit of time trying to figure how where it was doing some things I didn’t want done at all and other places where it got my intentions backwards. For example, we both had different ideas about what a variable called _defaultColor should refer to. That took me a bit.

I could have tried to ask CoPilot to fix the problem for me but if I had a better idea of how to express what I wanted it would probably have gotten things right, for my definition of right, the first time. So I fixed it myself.

I also made some assumptions about what certain methods were doing. I mostly assumed correctly but mostly is not really good enough when dealing with code. I really should have spent more time reading the code and making sure I understood it before trying to modify it. Yes, I said it before knowing how to read code is more important than ever.

Reading code on a screen can be painful though. One tends to get a sort of tunnel vision looking at little bits of code at a time. Many years ago I worked with a developer who had a terminal that was originally developed to typesetting at newspapers. It was tall and could hold a lot of lines of code. It was great for reading code. I don’t have anything like that. For me, the answer is printing listings out on paper. Maybe its just me but that is what has worked well for me for over 50 years of writing code.

I have more modifications I want to make to my program. I’ll spend some serious time reviewing the generated code before I try to make those modifications.

Related read: "Source code is the literature of computer scientists." https://www.cs.uni.edu/~wallingf/blog/archives/monthly/2025-12.html#e2025-12-26T18_28_37.htm A post by Eugene Wallingford

One other note, CoPilot added a lot of helpful error handling code to what I asked. That’s awesome in a lot of ways. I think that spotting a lot of error handling code may be something that tips off an educator that a student used artificial intelligence to write their code. Keep a look out and be sure to ask the student to explain it all.

Sunday, July 20, 2025

Tech Promised Everything. Did it deliver?

This TEDx talk by Scott Hanselman has been shared a lot on BlueSky, and probably other places, over the last few days. I finally had (made) some time to watch it today. It is something I would show early in all my classes if I were still teaching. I recommend it for everyone though.

Technology promised us Community, Convenience, and Creativity. This talk asks the question “Did it deliver?” It’s a good question and the answer is both yes and no. A lot of the answer is up to us. And by us I mean everyone but especially those of us deep into technology.

As CS educators, most of us talk about computing, especially programming, as a creative tool. Does AI help or hinder that? A lot is going to depend on how we teach it and how people use it. Just as social media promises community and connection but so often results in isolation, AI can go in different directions. We’re still early in to the AI “thing” and that means there is a lot of potential for helping move in a direction. What is the direction we want for it?

Just about everything has unintended consequences. Technology is perhaps first among those things. We need to think deeply about how we use it.

Tuesday, December 31, 2024

H1B AI and the Future of Computer Science education

H1B visas are back in the news these days. One one hand we have some loud calls for more H1B visas with a claim that US native workers are not up to snuff. Or at least that there are not enough good ones locally. On the other hand, people claim that well qualified Americans are losing out because foreign workers are taking jobs at lower pay. That the call for H1Bs is all about saving money. Amidst all of this, American students are wondering about future jobs for them between artificial intelligence and H1B workers taking all the jobs.

H1B and both hiring and salaries are actually more complicated than many think. Some claim that H1B workers work for less but the law and most hiring companies payH1B workers and natives the same salaries.Plus it can be hard to hire H1B workers because of government rules and paperwork.

On the other hand, supply and demand are involved. If H1B workers increase supply than salaries may be lower for everyone. My friends and contacts in the software industry complain that there is an over abundances of programmers and that the need is dropping because of AI. Other industries may very well be different. I just don't know.

From what I have read a majority of H1B visas these days do got to software developers. Are Musk and Ramaswamy talking about a need for other types of engineers? Are we facing a shortage of other engineers? I don’t know but I will focus on computer/software types because that is where my expertise rests.

Some of that Musk and especially Ramaswamy are saying is that US student don’t work hard enough and that the US educational system is not helping. Leaving aside that many of the people who agree with them want to cut funding for education and make the system worse aside, what is happening.

I have taught a number of international students over the years. These students generally do work harder and show more respect for teachers and for learning. Ramaswamy is not totally wrong on that. The students I have had are not typical in many ways from their peers in their home countries. I would hesitate to extrapolate to what goes on in those countries. Lets face it, it takes a very motivated and privileged student to go study in another country.

Priorities are a bit off in some respects in American education though. Look at how many states where the highest paid public employee is a college football or basketball coach. In other countries sports and school are not as connected as in the US. How often to athletes get special treatment in American schools and college admission! And yet, students come to the US from all over the world to study at American universities. Clearly, we’re doing some things right.

Cost of higher ed is a turn off and a burden for many. Universities are spending money on some non-academic things to attract students which adds to the cost. That is in part, I think, because the US has cut funding that could help students get a good education. People forget that the greatest growth in the economy came from GIs getting free tuition after WW II. Reducing government funding of higher ed is a direct cause IMHO, for a perceived need for H1B workers. If Musk and Ramaswamy think there are problems with US education spending more money IS the answer.

What does this mean for American students? Well, for starters it means they need to do more to prove themselves. Years ago I was working for Microsoft on a competition called the Imagine Cup. International students took to it and worked their tails off. American students, especially those at top universities, said that there wasn’t enough prize money to make it worth their while. A degree from a name university was all they needed. They saw no need to try to prove themselves. Those days are gone! And good riddance.

A student today who wants a career in software or related fields can get it but they should not expect it to be handed to them. The evidence companies are looking for are not grades or what university you attended but actual evidence of accomplishment. A solid portfolio in GitHub for example. Or projects completed in an internship or working to help a non profit. Or perhaps building out systems for a small business. What did you do outside of classwork?

High school students work very hard to get into universities. They research what universities are looking for and they build impressive resumes. Too often they coast once getting into university. Oh sure, the academics can be hard and they have to work at it. But universities have all sorts of support for students once they get into the university. It is tempting to think that university is about having a good time before being handed a good job. That is the mentality that hurts students.

Can American students have a good career in computing in spite of AI and H1B visas? Absolutely, but they cannot take it for granted.

Monday, November 18, 2024

Does AI Mean The End Of Teaching Programming

The tl;dr of it is no. At least not yet. As more and more people use artificial intelligent agents to help write code we’re learning that AI is not quite all there yet. Take this article from CIO magazine Devs gaining little (if anything) from AI coding assistants

It appears that there is still a lot of need for people who know how to code to do debugging and tuning or AI generated code.

My former students who are developers tell me that they are using AI quite a bit. And they say it helps them. No one has said they have been replaced by AI yet. Frankly, I don’t see that coming anytime soon.

A professor from a major university told me about a study where students were asked to write secure code. Half were told to do it on their own while half were told they could use AI. The students without AI wrote more secure and less buggy code.

More research needs to be done and we can argue over research methods as well. But I think that the jury is still out on AI. Will it get better? Probably. Will AI reduce the need for human programmers? I don’t think we have that answer yet. For the time being though we’re going to need actual people involved in the software development arena.

Tuesday, February 27, 2024

Alphabet? What alphabet?

I used to start a talk on internationalization of code with the question “How many letters are in the alphabet?”  Once I had several people say “26” I would ask “Shouldn’t you ask ‘what alphabet’ first?” I would then discuss some different alphabets and how many more or fewer letters they had. Then briefly mention that not all alphabets look the same. That’s is why ASCII is not good enough.

Today I ran across the following graphic. I wish I’d had it back in the classroom.

Who knew there were so many diffe3rent scripts? I suspect that are many more not on this list of course. Let’s not forget that some them are read left to right and not right to left.

Are you discussing multiple scripts and alphabets with students? It can bring up some interesting questions. And widen ones experience. If you are lucky enough to have students who are familiar with these non-Roman script languages ask them to explain how sorting of words happens. I had Chinese exchange students who were happy to explain how Chinese words are sorted. Short answer is by the strokes that make up the words.

Monday, December 18, 2023

How Much Hardware Knowledge Do CS Students Need

Back to the basics! Get students close to the hardware! Really? Just how much hardware knowledge to students need today? This post was prompted by a post getting some attention in Facebook this weekend. The Decline of Hardware Knowledge in the Era of Cloud Native Compute

Now I have been around for a while. I programmed using punch cards and paper tape. I spent some time in an operating system development group where I analyzed crash dumps, wrote code in assembly to traverse stacks and queues to understand what was going on. Great fun. In hindsight anyway. But do high school students need to get that close to the computer today? Probably not.

Would it hurt them? Also probably not. Most students don’t really need assembly language or detailed hardware knowledge. Once upon a time, for example, it was important o know exactly how data was stored on a disk with block sizes especially important. For solid state “disk” that is less important if it matters at all.

It’s a mistake to assume that the way we were taught and the things we were taught should still be taught in the same way.

Typical instruction about hardware today is about the parts of the computer – CPU, memory, maybe some talk about cache . In some schools students disassemble and reassemble computers but that is getting harder to do as parts get smaller and more tightly integrated. I don’t want to mess with my laptop at all if I can avoid it.

That is probably enough at the high school level. Now in university I would like students to have some knowledge of things like how micro code is used to code today’s CPU instructions, pipelining, caching, and yes, maybe a little assembly programming. The latter more as a unit than a full course. Let the students who want to take more advanced assembly or micro coding course work.

One big problem with expecting the sort of deep in the woods course work in high school is the lack of teachers who can really teach it. We have enough trouble finding teachers who know Java or Python. Finding teachers who can teach assembly language, explain the inner workings of an OS or the machine hardware? Good luck!

Be sure to read Mike Zamansky’ related post Low Level CS in HS - C'est la Z (cestlaz.GitHub.io)

Tuesday, February 14, 2023

People Are Bad At Giving Instructions

One of the things that make me sure that programming will be around for awhile even with better and better artificial intelligences is that people are bad at giving instructions. Well, that may be unfair. They are reasonably good at giving instruction to other people but that is not the same as being good at giving instruction to the literal minded.

The most famous instruction, I first heard it from Grace Hopper almost 50 years ago is the instruction for using shampoo “Lather, Rince, Repeat.” There is a lot left out there. Most obviously, repeat how many times? It also doesn’t say if one should wet their hair first. In computer terms, an infinite loop without setting initial conditions.

I recently bought a new cover for a light switch. The first instruction was to turn off the circuit breaker for the switch. Good advice. On the other hand, the instructions did not say to reset the circuit breaker when finished installing the cover. A literal minded installer would never have a working switch.

Of course, people figure these things out. We are aware of the larger context and are good at filling in missing pieces. Computers are not that good at any of this.

Part of what we teaching when teaching programming is how to give instructions. Not just how to translate those instructions into code but to fully understand and describe the steps needed to complete at task. I believe these are necessary skills. I think they will translate to other fields. Not that I have proof but it seems logical. In any case, we’re going to have to get good at giving instructions if we are going to tell AIs what code  to write.

Friday, January 27, 2023

Rhode Island Computer Museum

I spent some time looking at the Rhode Island Computer Museum web page today. A lot of interesting stuff. Some great information under the Education and Activities page. If you teach the history of computers this is a great resource with text and pictures.

The Collections gallery has a huge collection of images and descriptions of items they have as well. Check it out at Home (ricomputermuseum.org)

Tuesday, September 20, 2022

Coding It Yourself Can Be Fun

Every couple of weeks I bake a couple of loaves of bread. The bread mostly gets used for breakfast sandwiches. Now my bread does not look as perfect as what I could get in a bakery. And the bagels? Once in a while I try my hand at bagels, don’t look anything close to what I get at my favorite bagel place. But they all taste good and I find it very satisfying to make it myself.

Coding can be a bit the same. Not everyone writes professional looking (or performing) code but sometimes there is some satisfaction in having a program that works just they way you want it to and does just what you need. Maybe it is not “release to the public” neat and tidy. It may be what we used to call a “programmers program.” In other words, a program that only the programmer who write it could (or would) use. My Wordle solver helper program is one such. It works great – for me. It doesn’t have the error checking a released program should have. And maybe it should start at one and not zero. But it works great for me.

Programming is basically stating a process or method using computer code. My Wordle solver represents my thinking of how I think Wordle could be solved. It was fun to write and is fun to use. It’s not ready for prime time though. Does that make it a bad program? No more than my imperfect bread or bagels are bad. They both meet my needs and that, for me, for these, is all that matters.

In some ways, that is the message we may want to pass on to students. Many, perhaps most, of our students will not become professional software developers. They may still write code for their own tasks or interests though. We need to help them enjoy that experience. One way to do this is to assign projects that are interesting to the student. Open ended projects are good for this but even better is letting students select their own projects.

For semester ending projects, I used to allow students to select from a list of suggested projects and also to have the option to design their own projects (after discussion with the teacher) that solved a problem that they were interested in solving.  Helping students find the fun and satisfaction in solving an assignment promotes their learning. And, I hope, helps them think of computer science as worth doing for themselves.

Monday, January 17, 2022

Computer Science for the sake of ?

My grandson in kindergarten has a class in reading. It makes sense as he is just learning how to read. Over time, school spends less time teaching how to read and a lot more time using using reading to support learning. For many years, I have been saying that computer science and its tools should be the same.

Early on I thought of things like using spreadsheets to look at data. More and more I see programming as a learning tool as well. But coming back to data. I recently watched a TEDx talk by Emmanuel Schanzer titled Four Ingredients for K-12 Data Science. Watch it. It’s cool. In any case, it is clear that Bootstrap Data Science takes things I used to think about to a whole new level.  I saw a presentation on this by students at a conference in the before times and was impressed with what students had learned.

Now Bootstrap is probably best known for their mix of computer science and algebra but they are moving into more areas of the curriculum and I think that is a great thing.

I’ve also mentioned Mark Guzdial’s work in teaspoon languages. (task-specific programming => TSP => Teaspoon) Mark’s work involves “adding a teaspoon of computing into other subjects.” It’s still some early days on this effort but it looks very promising.

Last spring, while I was teaching at a new (to me) school I spend some time with a teacher of astronomy. He was having his students write Python programs to solve astrophysics problems. Faster and more accurate than the slide rule stuff back in my day.

In many ways, I think the CS 4 All movement has been a bit too focused on stand alone computer science classes. Those have a role for sure and some great value. But ultimately, computer science is used in just about every discipline we have today. Teaching it in those various contexts and using CS to help learn those other areas of knowledge is were CS education can have its greatest impact. And greatest relevance. Finding more ways to do that should be a priority. Not just for CS bot for all areas of teaching and learning.

Tuesday, January 11, 2022

How Do You Define a Computer Scientist

The last few days have seem some social media discussion about requirements for a computer scientist. Is Calculus a requirement? Is Assembly/machine language a requirement? Among the “yes” and “no” answers there are requests for a definition of a computer scientist. I doubt we could get agreement on a single definition. The mental image people have of a computer scientist is closely related to what knowledge they think a computer scientist should have.

In K-12 education I think we should be very careful and drawing too narrow a definition of a computer scientist. If truth there are many kinds of computer scientist and each kind has its own requirements.

Someone exploring the science of compiler design and code optimization probably does need a solid understanding of machine language. Someone whose focus is on machine learning probably doesn’t as their tools will be at a higher level than the machine. Computer cryptography could probably use a good dose of Calculus. As could some other focuses. Does someone studying user interface? Maybe not.

Should students focus on a special area while in (or before) high school? I don’t think so. They'll have more opportunity to find a focus later. Is Calculus useful? Sure, and for more than just computer science. But there isn’t much that students will do in your average HS CS course that requires it.

The same is true of assembly language. Assembly language clearly gives students greater understanding of the machine below. Some exposure to it is good for programmers and computer scientists. Should it be required? Again, probably not at any depth unless there is a specific need to it.

Back when I was learning CS we had a computer without the memory for an operating system. Programming in assembly language was required. I had to learn how to program subtraction, division, and multiplication on a machine that lacked built-in instructions for those operations. A great learning experience but not one I found much use for later in my (almost 50 year) career. I did work on some projects that required a firm knowledge of the execution speed of different instructions. And knowledge of assembly language helped there. But we don’t see that sort of need except in rare cases these days.

What was required knowledge 50 years ago may not be the same as required knowledge today.  We have to avoid the blind assumption that what we learned and the way we learned “back in the day” is the way things have to be today.

Monday, November 08, 2021

Money is Hard in Programming

Last week I wrote about the making change for a dollar project. It got me thinking about how hard dealing with money in programming really is. The problem with money is that 1/10 is an infinitely repeating fraction in Binary.If one adds 1/10

Take the following C$ code.

double penny = 1.0 / 10.0;
double dime = 0.0;
Console.WriteLine(penny);  
for (int I = 0; I < 100; I++)
{
     dime += penny;
}
if (dime == 10.0) Console.WriteLine("Dime");
Console.WriteLine(dime);

One might expect that the word “dime” would be printed but it’s not. What this code actually prints is the following.

0.1
9.99999999999998

The 0.1 is expected but as you can see, adding the 0.1 100 times doesn’t give exactly 10.0. The problem often doesn’t show up right away. This sort of thing often confuses beginners because the programming language “helpfully” hides the issue. When I had the program display the value of “dime” after every addition the discrepancy don’t show up until around 6.0.

5.8
5.9
5.99999999999999

It’s not only beginners who struggle with this issue. It’s a pretty common issue and some languages support a currency data type for that reason. The currency data type adds some overhead to operations and not everyone is a fan of using it. A different alternative is to use integers and insert a decimal point on display.

One of the first programming languages I used for business related software, called DIBOL, didn’t support floating point numbers at all. It supported 18 digits of integer accuracy. It was an interesting language. Using it did make it easier for me to think about using integers for money later in my career though. Most beginners don’t have that sort of a helpful start. They are used to thinking in digital rather than binary. To my way of thinking this reinforces my thinking that learning binary is an important part of computer science education.