If not SICP, then what? Maybe HTDP?
When I started my Bachelor in Italy (Bologna) I had actually not enrolled yet to the degree, and I was instead following both Computer Science and Philosphy. My plan was to continue both of them, or to choose one.
We had this first year programming course taught by a fairly younger teacher (39), Ms Busi: I was expecting not much from it because I thought it would be an introductory course on programming OOP stuff with Java, things that I had done fairly extensively during the high school program. Hower, on the first day, she explained us that we were going to use a language called &quot;Scheme&quot; and that our reference book was going to be freeily available (in general, courses in Italy often require expensive books - sometimes ones that you won&#x27;t find on the internet since they are written by exactly your little-known professor and will be available in selected book shops of the city), the book was &quot;How to Design Programs&quot;. She said that one of the goals of this choice was also to decrease the difference in levels between students: we would use a language nobody knew, and approach a paradigm that nobody knew, and this would have made her (interactive) lessons and the lab practice more interesting. I also remember how she said &quot;the organization of this course is going to be simple: every day, you will come and I will write down a problem on the whiteboard, and we will find a solution. Then, we will find a better, more beautiful solution, and that&#x27;s it&quot;. I could see she knew that this choice was going to upset people, so much that she tried to sweeten the pill by saying &quot;this is how they teach programming at MIT&quot;.<p>Indeed, the course did upset people. I remember how people constantly complained how shitty this decision was, how &quot;people in the 1st year engineering classes are doing real Java programming while we do this shit no employer asks for&quot;, some noted how the language was stupid, or in the best case just a toy, useless in &quot;the real world&quot;. Thing got worse when some people realized that, contrary to their expectations, they did not know how to program, since they could not do eg. graph traversals once that was stripped of its OOP or Java-like envelope - &quot;I will fail the year because of the bloody scheme!&quot;, they would say.<p>To me, instead, it was revelatory. We did indeed solve one problem per week, and although the problems were less sexy than the ones I was expecting (finding the max of a list is not the coolest thing in the world), promises were kept, and little by little I started appreciating how much you could express with so few lines or predefined functions, leveraging only on very few concepts (eg. recursion), it was different from the programming we had done in high school. It was also a big difference with the university classes of philosphy, where &quot;assistant professors&quot; (underpaid PhD [students]) will come to read you a book AND a comment to it, with very little intellectual work needed from either them or students.
I quickly decided to follow only Computer Science. I became no black belt lisper or anything, but that style of programming, of looking at problems, software and the whole field certainly influenced me.
I am currently enjoying my role at a FAANG company, and thinking about all of this made me want to write her an email to thank her, but the saddest thing is that I can&#x27;t do it because right at the end of that academic year, Ms Busi actually died, unexpectedly, at the age of only 39.
First year student of CS in Bologna now learn Python programming.<p>(this is her uni page if you are curious: <a href="http:&#x2F;&#x2F;www.cs.unibo.it&#x2F;~busi&#x2F;" rel="nofollow">http:&#x2F;&#x2F;www.cs.unibo.it&#x2F;~busi&#x2F;</a>)