How software development is taught
The Handmade Network exists because we are unhappy with the software status quo. To a large extent, this is because of how software development is taught. What are the good parts of software education today, what are the flaws, and how might we change things to improve the state of software?
This is a
fishbowl: a panel conversation held on the Handmade Network Discord where a select few participants discuss a topic in depth. We host them on a regular basis, so if you want to catch the next one,
join the Discord!
Please read over the discussion context if you haven't already. It is recommended that you also listened to the podcast as some of this was explored a bit by @demetrispanos and @ryanfleury , though if you haven't that's alright too.
A few goals I have for this fishbowl are:
1. Discuss how formal software development education is flawed. From the podcast, we learned how societal and economic pressures have influenced universities to become this way, let's break down exactly what they're doing wrong and what they could do differently if these factors weren't a concern. For example, if professors were completely and entirely motivated on producing the best programmers they possibly could. Let's also discuss what they're doing right.
2. Let's extend this example to other formal learning environments: Books, Online Courses, Videos, etc. What goes wrong there? What goes right?
3. Perhaps most important, and what I would like to spend the most time focusing on, are solutions. What would be a better way to train someone in software development? How does it start, what does the journeyman path look like, what about advanced learning? Be specific.
Participants:
@Rudy [moderating]
@raysan5
@demetrispanos
@greensleevless
@ratchetfreak
@CianMc
@bumbread
@bvisness is adding roles now (thank you
)
Feel free to kick it off with anything relevant to the discussion, or directly addressing the first question via your experience. I am especially excited to hear your perspective, @raysan5 as if I'm not mistaken, raylib was born out of the lack of a better way to teach students proper programming concepts in an interesting and fun way
Maybe we could introduce ourselves and how we are connected with the topic?
Sure, that would be great!
I'm an Electronic Engineer and I've never had formal Computer Science education (despite I've studied several related subjects in the University). For the last 10 years I've been working in Videogames Development education, at different levels, teaching undergraduate courses and also as University lecturer. Most of the subjects I've taught have been related to Programming and Projects development. I've also been a point-of-contact for companies looking for interns.
Hi guys, I'm Cian, I am a recently graduated Computer Science student. Entering into university after leaving school, it became clear pretty quickly that the course didn't quite line up with what I thought it would be, sometimes for the better and sometimes not. While I do think Computer Science departments do a lot right, they also get a lot wrong, regarding things like how they advertise the course(as mentioned on the podcast by @demetrispanos ), how programming is taught(or isn't lol), how external popular employment trends and buzzwords heavily influence the types of modules included, leading to fairly narrow bands of potential specialisation for students and finally how professors, being more researched oriented, can be out of touch with the practicalities of modern development
Hi folks! I'm Peter - I've been working as a game designer at a design consultancy (happy to shed some light on the consultancy discussion from the podcast - IDEO is a bit different, but same ballpark), and I spent a good portion of the last 5 years working on using games to get kids excited/intro'd to engineering. I've also taught game development to high schoolers. And fun note: my formal education is a BFA in Illustration - never formally studied anything engineering related
I work at an engineering bureau where I design and simulate trafficlight programs. For which I created and maintain several tools to streamline the entire process into something manageable.
HI, i'm bumbread (haha), currently I am a 1st year CS student. Also I do like teaching programming and maths and I could become a school teacher potentially. I'm also doing a project related to education, particularly one with notes about osdev. Even though those are notes, i'm trying to format them in a way that is close to a resource that could actually teach someone who doesn't have understanding
I have an academic background in computational mathematics including a PhD, and several years experience as an academic myself before settling full time on my own professional ventures in Machine Learning and AI, where I do the relatively rare work of linking up new mathematical approaches with (IMO) high quality software design. I have taught at university and graduate school level, and done volunteer events for high school and middle school students.
Hey folks Iโm Rudy
- I proposed the topic and will be moderating the discussion. I work as a jack-of-all trades on our systems team at Automattic - we are the group responsible for the availability, performance, reliability, and security of all Automatticโs services. Iโm currently focused primarily on Tumblr.com (yes that one
) I spent a long time in the Military where some of that time was served as an NEC 9502 (Instructor), I spend some time making educational videos on youtube and I earned a Bachelors and Masters Degree. My wife is also a professor at the University of Texas at San Antonio and through her, I understand many of the topics related to higher education are not necessarily specific to computer science.
the podcast made the case that programming should be taught in a tradeschool instead of a uni
ratchetfreak
the podcast made the case that programming should be taught in a tradeschool instead of a uni
I might expand this to something like a "specialist school" since "trade school" has connotations (at least in the US) that maybe aren't helpful
music school, art school, design school, architecture school, these are generally seen as equally prestigious as universities
but trade school (for reasons that are out of scope here) is not
I kinda wanted to lean into some of those connotations though
demetrispanos
music school, art school, design school, architecture school, these are generally seen as equally prestigious as universities
but could all be called trade schools
ratchetfreak
but could all be called trade schools
in a platonic sense certainly, you could throw in law and medical school too
Thinking about it there are programming schools, which ~ in a sense ~ are like the music schools. The similarity is that they aren't part of the education system, and when you enroll you gotta pay
I thought the podcast discussion about universities existing across this gap of "centers of aggregated knowledge" <-> "human capital factories" was really interesting. How do you see specialist schools differing / why would they avoid the pitfalls of existing higher ed?
my biggest peeve with the programming education that I was given at uni is that many concepts that I consider important were never mentioned.
For example the main event loop and how gui frameworks can deal with them, and how to interact with them through those abstractions (rule number one: never block). I had to figure that out on my own.
greensleevless
Nice!
Jumping back up to the conversation that started ^pre intros^ - I thought the podcast discussion about universities existing across this gap of "centers of aggregated knowledge" <-> "human capital factories" was really interesting. How do you see specialist schools differing / why would they avoid the pitfalls of existing higher ed?
the "HCF" view is explicitly the view taken by music schools, architecture schools, and so on
they exist to create good musicians and architects
separately there are music and architecture researchers in universities, and those people do things like study history and so on (there is of course overlap, and many universities have embedded music or architecture schools to facilitate this)
With trade schools, does anyone think that there could be an issue with attracting the necessary teaching talent. I agree with the concept but with such a competitive job market would it not be difficult to attract the required teaching talent?
there are game dev schools already, though I'm unsure as to how effective they are
broadening those out to general programming would be a natural step to take
Calling back to the podcast again - seems like it could potentially fill a gap in the market - those people who are closer to generalists that couldn't find teaching gigs at universities, but who still want to teach?
But the matter of recognition of those institutions matters (both in a "I taught there" and as a "I learned there, give me a job" sense)
@CianMc makes a good point that specifically for programming, there is a huge cost problem in getting good people
@demetrispanos @CianMc one thing to consider is the market has already tried to address this in the form of "boot camps"
CianMc
With trade schools, does anyone think that there could be an issue with attracting the necessary teaching talent. I agree with the concept but with such a competitive job market would it not be difficult to attract the required teaching talent?
On my experience, trade schools are more open to professionals teaching some specific subject than at University level where usually some specific titles (as a PhD) are required to teach there.
1
raysan5
On my experience, trade schools are more open to professionals teaching some specific subject than at University level where usually some specific titles (as a PhD) are required to teach there.
that's true, it would definitely be more attractive and open to a working professional with a Bachelors/no degree
raysan5
On my experience, trade schools are more open to professionals teaching some specific subject than at University level where usually some specific titles (as a PhD) are required to teach there.
My experience at design school feels similar to that aspect of trade school - our teachers were often people commuting in from their ~jobs as designers/illustrators/artists/etc - they often didn't have higher degrees than the ones we were studying for, but relied on portfolios of work instead.
1
but there is still the prestige of being a programmer with the implication that it's a highly intellectual job, It isn't, not to the point of university professor doing research
Rudy
@demetrispanos @CianMc one thing to consider is the market has already tried to address this in the form of "boot camps"
I feel like boot camps, generally, I don't have much experience of them, try and do the bare minimum in the least amount of time to make someone "employable" without delving too much into any one subject, which is fine, but there's also a need for something like a trade school where a deeper understanding can be developed
1
CianMc
I feel like boot camps, generally, I don't have much experience of them, try and do the bare minimum in the least amount of time to make someone "employable" without delving too much into any one subject, which is fine, but there's also a need for something like a trade school where a deeper understanding can be developed
at the risk of being provocative, I think most boot camps are either cynical or one step removed from cynicism
the idea that "anyone can be a programmer" is a real problem, and underlies the boot camp premise
it would be out of scope I think to get into boot camp economics, but if you dig into how they make money vs how recruiting companies make money you'll see a lot of overlap
demetrispanos
@CianMc makes a good point that specifically for programming, there is a huge cost problem in getting good people
I think it's very difficult for Universities to find teachers for high-technical subjects, at this moment there are many better offers out-there for those profiles than what the University can offer...
Totally, along with all these courses you see advertised on youtube etc
demetrispanos
the idea that "anyone can be a programmer" is a real problem, and underlies the boot camp premise
"learn programming in 20 days"
while I feel everyone should be introduced to programming at a young age so that everyone can see if it's for them or not, the idea that just because there's a large demand for developers that everyone should consider learning it is ridiculous and inherently leads to a reduction in software quality
to steelman boot camps for a moment, I do think there's a place for a boot camp for someone like an electrical engineer who already knows (say) matlab, who just needs to be taught the basics of mainstream programming languages and databases ... but this is not the most common case for boot camps
you need a certain mindset for programming and I don't believe that everyone will be able to grasp it
right, more of a transitionary program
not 0 to software engineer
but, I actually do think a focused "trade school" type of program might be a good fit
I think most traditional engineers could become programmers, that seems empirically true
demetrispanos
I think most traditional engineers could become programmers, that seems empirically true
There definitely is a certain shared problem solving mindset between those professions
the example I keep coming back to is music school
which I think is a very good fit for software development
I have always thought programming is akin to learning an instrument
@Rudy Agree, it has MANY things in common!
It might be an interesting point of discussion to talk about how music is taught and what we can translate to how to teach programming /sw engineering
(potentially something to come back to)
greensleevless
It might be an interesting point of discussion to talk about how music is taught and what we can translate to how to teach programming /sw engineering
one essential part of music/arch/design/art school is you spend most of your time doing the thing
(vs studying underlying theory about the thing)
synthesis vs analysis
CianMc
while I feel everyone should be introduced to programming at a young age so that everyone can see if it's for them or not, the idea that just because there's a large demand for developers that everyone should consider learning it is ridiculous and inherently leads to a reduction in software quality
I believe that everyone can learn to program quality software. We just don't have any teachers that would teach how to do it. Universities do not concentrate on correctness of the code too much, even though the point is spoken, the actual quality is not checked ~ the code is "tested" in the best case.
@bumbread well, I think it depends on the teacher
raysan5
@bumbread well, I think it depends on the teacher
and the student
2
bumbread
I believe that everyone can learn to program quality software. We just don't have any teachers that would teach how to do it. Universities do not concentrate on correctness of the code too much, even though the point is spoken, the actual quality is not checked ~ the code is "tested" in the best case.
that's an interesting view, maybe those that currently excel at programming have a natural ability/are good self learners, and others who struggle could become better developers if the proper guidance and resources were available to them?
(edited)
We just don't have any teachers that would teach how to do it.
@bumbread @raysan5 this is what I would like to spend the bulk of the time discussing later
let's stay focused on the problem at hand
1
bumbread
I believe that everyone can learn to program quality software. We just don't have any teachers that would teach how to do it. Universities do not concentrate on correctness of the code too much, even though the point is spoken, the actual quality is not checked ~ the code is "tested" in the best case.
personally, I focus way more on the soft skills that students need to actually learn programming than in advance programming concepts. For example: organization, coding conventions, focus to detail, variables naming, debugging, patience, understanding the process...
raysan5
personally, I focus way more on the soft skills that students need to actually learn programming than in advance programming concepts. For example: organization, coding conventions, focus to detail, variables naming, debugging, patience, understanding the process...
Curious: why do you say 'soft skills'?
or are your examples what you'd consider hard skills and you focus on other things?
everyone also learns differently
greensleevless
Curious: why do you say 'soft skills'?
I would also consider those hard skills
except things like attention to detail and patience
CianMc
that's an interesting view, maybe those that currently excel at programming have a natural ability/are good self learners, and others who struggle could become better developers if the proper guidance and resources were available to them?
(edited)
I don't like the idea of "natural ability", nor do I believe in it. All people have different experience, e.g. some were doing painting, so naturally everyone would understand different concepts differently. Some people also can learn based on the experience.
bumbread
I don't like the idea of "natural ability", nor do I believe in it. All people have different experience, e.g. some were doing painting, so naturally everyone would understand different concepts differently. Some people also can learn based on the experience.
neither do I, and maybe that's the wrong term for it, it's more probable that certain people can learn things by themselves in an unstructured in environment whereas others just need a structured/guided learning experience
greensleevless
Curious: why do you say 'soft skills'?
I mean, not that purely technical programming concepts but more a useful way to think to write code
would that not be more a case of theoretical vs practical skills/information?
How do you go about teaching those things? (I'm thinking about how this relates back to the convo of music schools having students spending lots of time playing music)
but like, what constitutes quality practice/effort?
You only need to teach principles and show examples. The practice is something a student has to do themselves
Right, but ideally the institution facilitates that practice right? You have to learn how to practice too after all
In my mind, quality practice includes consistent work on some problem with some form of objective criticism and critique, by yourself or someone else
for example getting a new library and then figuring out how to use it based on the (somewhat lacking) docs and functions available
doing that with the different API paradigms would be a great help as a programmer
for example, I require my students to follow strict coding and naming guidelines, not only on the deliveries but also on the daily work; I question my students a lot about the concepts I explain, I don't want that they just believe what the teachers says
(edited)
And that's one the big issues in my mind, students don't know what "good" code looks like, especially since that term has become so polluted by many accepted conventions that are taught
raysan5
for example, I require my students to follow strict coding and naming guidelines, not only on the deliveries but also on the daily work; I question my students a lot about the concepts I explain, I don't want that they just believe what the teachers says
(edited)
that's a very good approach in my mind
one problem here is that "good" is contextual
good test-an-idea code is different from good ship-to-thousands-of-servers code
demetrispanos
one problem here is that "good" is contextual
agreed
there are some overarching practices though that can always be attributed to good code
for example: writing non-clever code, always writing with the next person in mind
code is written once and read forever
Rudy
for example: writing non-clever code, always writing with the next person in mind
this is just not true for test-an-idea code though
1
I think Casey talked about this somewhere, that the label of "good" code needs to be objectively proven/backed up, whether that be through performance testing or some other measurable metric
and I think many many people suffer for lack of knowing "test an idea" practices
"find out if this is even worth doing well" is an essential task
and to do that time-efficiently it is often optimal to write terrible throwaway code
hard agree. I guess the problem is people tend to pipeline their "test an idea" code into production
1
yes this is an important counterbalancing weight
demetrispanos
and I think many many people suffer for lack of knowing "test an idea" practices
that was a big one for me, often I would never make any progress as I thought that my first implementation had to be flawless rather than a proof of concept
a related skill is how to then progress from that test stage to a robust piece of software
CianMc
a related skill is how to then progress from that test stage to a robust piece of software
this feels like the natural solution to this
whether it's iteration or a complete reconstruction of the idea properly
CianMc
that was a big one for me, often I would never make any progress as I thought that my first implementation had to be flawless rather than a proof of concept
I suffered from this myself for a few years and I had to train myself consciously to just write the simplest and stupidest thing first
same, but at least we're aware of it now, rather than not knowing where we went wrong
demetrispanos
I suffered from this myself for a few years and I had to train myself consciously to just write the simplest and stupidest thing first
Still suffering
Rudy
hard agree. I guess the problem is people tend to pipeline their "test an idea" code into production
Throwing something in from design school - the idea of a sketch is super important. It's never meant to become the final piece, just something you do to prepare for when you actually start
greensleevless
Throwing something in from design school - the idea of a sketch is super important. It's never meant to become the final piece, just something you do to prepare for when you actually start
right, well this brushes up on my favorite hobby horse the "plastics and metals" metaphor, which is based on how industrial product designers prototype things
if you can answer 50% of the questions with something that cost 1% to produce, you'd be silly not to do that
A related mindset is being ok with the fact that most of the time, the answers you learn are going to be "seek elsewhere" or "start over"
which our education system actively discourages
very much so, failure is punished rather than encouraged
which leads into something I've been thinking about, mandatory, but not graded assignments
maybe a better structure in formal learning would be the same assignment three times. 1. get it to "just work" 2. reconstruct it entirely with the next maintainer in mind 3. have someone else read and optimize it
Rudy
maybe a better structure in formal learning would be the same assignment three times. 1. get it to "just work" 2. reconstruct it entirely with the next maintainer in mind 3. have someone else read and optimize it
absolutely
greensleevless
which our education system actively discourages
100% very important here, schools condition you to see your performance as deviation from perfection, as opposed to deviation from failure
schools say "you start with 100 points, and you lose points for making mistakes"
3
instead of "you start with nothing, and you earn points for success"
(I'm oversimplifying here but I think it's an important point)
demetrispanos
schools say "you start with 100 points, and you lose points for making mistakes"
The game designer in me went to "those are mechanically the same" but the perception is super important
they're not mechanically the same if the set of activities is not fixed
but I agree for a fixed set of activities they are formally the same
^ ah ok, yea - like the emphasis becomes "You got there" even if it took a while
I'm trying to keep the jokes out of this but can't help my brain from typing "10 POINTS TO GRYFFINDOR"
2
Rudy
maybe a better structure in formal learning would be the same assignment three times. 1. get it to "just work" 2. reconstruct it entirely with the next maintainer in mind 3. have someone else read and optimize it
I usually provide my students with a GitHub template to work over it
1
{game project description here}. Contribute to raysan5/game_project_template development by creating an account on GitHub.
raysan5
In this case they get the code from the instructor
they have some base code to start working with, they can use it or not, but the good thing about it is that they already have a preconfigured package for a nice delivery and presentation of the product, not only focused on the code itself
(edited)
raysan5
they have some base code to start working with, they can use it or not, but the good thing about it is that they already have a preconfigured package for a nice delivery and presentation of the product, not only focused on the code itself
(edited)
That's interesting - makes me think about the skill of "getting started well". Using your example to show them what that looks like, but do you ever have them then try and start on their own on follow up assignments? Is there value in that?
by the way, the code in that template is not written by me, it was created by a previous teacher, I just tried to adapt it a little... but I was not allowed by University to adapt it to what I'd like it to be... that's probably another discussion point...
(edited)
1
Is there anything higher learning institutions, books, training courses, i.e. existing paths to learn software development, get right?
they teach the theoretical well
though getting it down to practical code tends to be an issue
ratchetfreak
they teach the theoretical well
well...
I think anything around analyzing algorithms and data structures is covered relatively well, though maybe not how to apply that analysis
at least I learned the theories that my uni tried to teach me
I think fundamentals are usually taught well
(well, maybe a bit outdated sometimes)
do we mean sorting algorithms? big O notation?
that was part of it yeah, but my courses included databases, parallel compute, operating systems, oop patterns, computer graphics, etc.
(edited)
Logic, Maths, Physics, Computers Arquitecture (the basis)
I agree, the fundamentals are taught well generally, the only problem being that they fail to expand on this foundation
or tie the foundation to the theoretical and make it practical
yep, I have been reading/doing nand2tetris lately and I love how it ties the two together
the port of those fundamentals to practice is what I think could fail...
Computer Systems/Architecture can be quite a dry theoretical topic, but when combined with a practical element it becomes very enjoyable
it's probably akin to true architecture
learning about physics and angles > actually creating something
raysan5
the port of those fundamentals to practice is what I think could fail...
To be a bit provocative - and this comes from the way the question was originally phrased ("when do we switch from foundations like mathematics, algorithms and data structures to creating software") - is that I think that order is backwards
(this is kind of bringing what @demetrispanos and I just mentioned in #fishbowl-audience in here)
(edited)
Another thing institutions do well are labs, either where structured work is given or where it's used as a place where students can ask the professor/tutor for help with the current assignment
1
unless they let the student BS their way out of the work of course
but that's more of a lead the horse to water thing
ratchetfreak
unless they let the student BS their way out of the work of course
yeap, but, again, it will depend on the teacher
Yep, or what happens quite often is that the college doesn't hire enough tutors so students get very little or no 1-1 time
CianMc
Yep, or what happens quite often is that the college doesn't hire enough tutors so students get very little or no 1-1 time
agree!
CianMc
Yep, or what happens quite often is that the college doesn't hire enough tutors so students get very little or no 1-1 time
In my experience, and this was covered in the podcast a bit, but teaching is really an afterthought for professors
their main focus is advancing their field through research
Rudy
In my experience, and this was covered in the podcast a bit, but teaching is really an afterthought for professors
also agree... and I think that's a big problem
1
greensleevless
To be a bit provocative - and this comes from the way the question was originally phrased ("when do we switch from foundations like mathematics, algorithms and data structures to creating software") - is that I think that order is backwards
do you think fundamentals are actually conditioned by the way software is written today? should them?
greensleevless
To be a bit provocative - and this comes from the way the question was originally phrased ("when do we switch from foundations like mathematics, algorithms and data structures to creating software") - is that I think that order is backwards
Could you elaborate
Rudy
Could you elaborate
Yea so a lot of what I've worked on was building an engagement curve for kids - how do we show them why engineering is interesting/worthwhile - and the way you do that is by letting that have perceived impact early on. We can't start by teaching them algorithms - they don't care. And I think this scales up to adults - we aren't fundamentally different from kids, we just have more experience.
2
greensleevless
Yea so a lot of what I've worked on was building an engagement curve for kids - how do we show them why engineering is interesting/worthwhile - and the way you do that is by letting that have perceived impact early on. We can't start by teaching them algorithms - they don't care. And I think this scales up to adults - we aren't fundamentally different from kids, we just have more experience.
love this
So when we're talking about how to teach people software engineering better, I think the best thing to do is to get them to the thing they care about as quickly as possible
because the software isn't the point when you start out right? Its about the increased capability in some other area
absolutely, it can be very obvious sometimes too, like where it's clear the professor didn't write the notes they're giving and the first time they're reading them is in the class or shortly before class lol
greensleevless
So when we're talking about how to teach people software engineering better, I think the best thing to do is to get them to the thing they care about as quickly as possible
I learned a little bit about electricity / electronics later in life, and I bought a book to do it. Instead of teaching about the concepts in theory, each chapter started with the thing you were making/testing and it almost always blew up. then you learned about the theory of why, then you re-made it properly
greensleevless
So when we're talking about how to teach people software engineering better, I think the best thing to do is to get them to the thing they care about as quickly as possible
And then the possibilities are endless. You could say "hey see your program is a piece of shit. in this course I will teach you how to make this piece of shit into an actually good program"
1
greensleevless
So when we're talking about how to teach people software engineering better, I think the best thing to do is to get them to the thing they care about as quickly as possible
yes this also relates to programming language design, and the huge gap between when I learned basic/logo vs what people learn today
when I started as a kid, you just booted the thing and wrote a few lines of code and you had pixels on the screen
demetrispanos
when I started as a kid, you just booted the thing and wrote a few lines of code and you had pixels on the screen
nowadays this thing is rarely exciting unless they have call of duty running, and IMO having that created in under an hour is a very poisonous idea
bumbread
nowadays this thing is rarely exciting unless they have call of duty running, and IMO having that created in under an hour is a very poisonous idea
I find that if you show kids they can do this in the browser, some are fairly interested
^ But this is exactly what things like Minecraft and Roblox are doing
raysan5
and so I created raylib
Ya so I'm curious what design considerations went into that?
Like, how is the design of raylib different because its designed for this purpose - with education in mind?
(edited)
raysan5
and so I created raylib
Oh I forgot that you are a person who created raylib lol
1
greensleevless
Ya so I'm curious what design considerations went into that?
Simple, I had 50h to teach art students to program games (they had never written a single line of code before)... and still I wanted that they actually wrote some code, so, I tried to create something simple and self-contained that could fit in my teaching methodology
(edited)
sincerely, I didn't expect it to work... but students start seeing things moving on the screen connected with the code and that was VERY engaging for them
(edited)
raysan5
sincerely, I didn't expect it to work... but students start seeing things moving on the screen connected with the code and that was VERY engaging for them
(edited)
immediate feedback on iteration is very important to keeping people engages in learning
2
it taught me how to use coroutines for waiting on something instead of sleeping
I had fun building an actual computer in vanila minecraft
raysan5
sincerely, I didn't expect it to work... but students start seeing things moving on the screen connected with the code and that was VERY engaging for them
(edited)
This reminds me of something Dan Cook (from Spry Fox) said on Twitter a few months ago - how good game design (and design more broadly) is about arranging the world to reveal value in specific places. That seems to intersect with good education as well. Is it fair to say that this is kind of how raylib facilitates education early on? How do you think about growing past that - to where you have to start dealing with externalities?
re "revealing value", there's the saying "education is not filling a bucket, but lighting a fire"
6
(i.e. creating some self-sustaining process in the student)
demetrispanos
re "revealing value", there's the saying "education is not filling a bucket, but lighting a fire"
Yep - its kind of where I was heading with thinking about growth past that initial intentionally-designed-for-education environment. Once you light that fire, does growth beyond your initial introduction kind of happen on its own?
demetrispanos
re "revealing value", there's the saying "education is not filling a bucket, but lighting a fire"
its a great quote
demetrispanos
(i.e. creating some self-sustaining process in the student)
that's it!
greensleevless
This reminds me of something Dan Cook (from Spry Fox) said on Twitter a few months ago - how good game design (and design more broadly) is about arranging the world to reveal value in specific places. That seems to intersect with good education as well. Is it fair to say that this is kind of how raylib facilitates education early on? How do you think about growing past that - to where you have to start dealing with externalities?
what do you mean with externalities?
raysan5
what do you mean with externalities?
This is where I think this discussion starts to have a ton of overlap with the HM philosophy.
So you constructed raylib in such a way that students get to impact (pixels on screen) very quickly. But the world isn't like that. Eventually you have to get them to start engaging with the existing software environment - build grit towards things like poor documentation, bad APIs, etc.
Those are what I mean by 'externalities'
And I'm not saying this to downplay the value things like raylib have - I think that role is possibly the most important (calling back to the 'light a fire' idea). But there are steps beyond that as well that are important too right?
yes absolutely, but I think there's a big difference in emotional investment
once you know that you can, in principle, do things you want with programming then you're more willing to tolerate "ok here's all the ugly stuff"
1
jumping out of the sandbox into a whirlpool will kill any enthusiasm
so your sandbox better give them the tools to survive the maelstrom
demetrispanos
once you know that you can, in principle, do things you want with programming then you're more willing to tolerate "ok here's all the ugly stuff"
That's interesting - I 100% agree, just never thought about it that way
greensleevless
That's interesting - I 100% agree, just never thought about it that way
there's a psychology "trick" that is common in the military, which is often summarized as "embrace the suck" where you actively discuss how bad something is going to be
and I think something similar can be used with programming (I certainly do a version of it)
where I tell people "ok, now we're going to do a bunch of stuff that's really awful and stupid, and you shouldn't feel bad thinking that it's awful and stupid ... everyone feels that way"
1
or kicking off a compile that takes the entire class to complete...
personally I lose motivation when I program something awful and stupid. That's the only reason its so hard for me to do
a huge problem I felt early on with "real programming" was that I kept feeling like, if I knew what I was doing, surely it wouldn't be so awful
and it was a revelation to me when I realize that actually it just is that awful
even experts fight with stupid linker errors ~daily
greensleevless
And I'm not saying this to downplay the value things like raylib have - I think that role is possibly the most important (calling back to the 'light a fire' idea). But there are steps beyond that as well that are important too right?
raylib was originally created to be just a playground for art students, as you said, to "light a fire", most of those students just had fun for a while and never wrote code again... but some of them (and those are the key) decided to learn more and go deeper down the rabbit hole... and they learned Unity or Unreal later on but when some fundamental question pop-up, most of them came back to raylib sources (that are very readable) to understand how things work in the background.
I wonder if a piece of the education discussion is around how teaching is equal parts expertise + experience design? Like its not enough that @raysan5 is a good engineer, but also that raylib incorporates thoughts on the experience of the student
it makes it harder to sell that idea when in military movies their friends are dying and you know it's going to suck then you watch movies with hackers and they're in the CIA mainframe in 5 minutes
1
Rudy
it makes it harder to sell that idea when in military movies their friends are dying and you know it's going to suck then you watch movies with hackers and they're in the CIA mainframe in 5 minutes
yes another thing I do with young students is talk to them about misleading hacker portrayals, and just make fun of it a bit
and help them feel like it's ok that they don't feel like hollywood told them they would feel
a huge reason for the high dropout rates in Comp Sci is the lack of understanding of what programming is, usually fuelled by hollywood lol
This is like how bad it is for young artists to watch speedpainting videos on youtube. You just feel awful cause you're slower than a video that's been sped up 20x
(edited)
greensleevless
I wonder if a piece of the education discussion is around how teaching is equal parts expertise + experience design? Like its not enough that @raysan5 is a good engineer, but also that raylib incorporates thoughts on the experience of the student
if you have never written code before and it looks like magic to you, being able to make some magic for a while is an unforgettable experience
raysan5
if you have never written code before and it looks like magic to you, being able to make some magic for a while is an unforgettable experience
That is really wonderful
CianMc
a huge reason for the high dropout rates in Comp Sci is the lack of understanding of what programming is, usually fuelled by hollywood lol
i think this has contributed to a subtle disdain I have always had for the word 'coding'
even though there shouldn't be
it's made out to be some secret special experience
but it's really just hard, and takes time, learning, frustration, and repetition
it's a process, which is why i prefer the term programming
Rudy
programming is a process
yes, but not all the students want to be programmers
some students just want to feel like programmers for a while
raysan5
if you have never written code before and it looks like magic to you, being able to make some magic for a while is an unforgettable experience
yes this is what I mean about the old-days experience, where you boot your Apple II and write 10 lines of code and you have a polygon
3
that makes you feel like "ok, making a polygon is roughly the same level of effort as solving a math problem"
depends on which api you picked that day
ratchetfreak
depends on which api you picked that day
there are APIs that hide the 20 hour opera, but the opera is happening
(I don't know if wagner's is really 20 hours, I'm just ballparking :P)
like there wasn't a 5 hour opera on the applyII to put that polygon on screen
Alright everyone, fishbowls normally run about 2-3 hours, and weโre about 1.5 hours in.
We have discussed the flaws in current software development training flows, we have discussed a little about what they do right. Letโs spend the remainder of the time discussing solutions. Things like:
- Is it possible for formal institutions to change course to incorporate the necessary changes, or is this not possible given the structure of academia?
- What would a โtrade schoolโ or โmusic schoolโ for software development look like? Be specific, imagine you were responsible for everything from the timeline to the curriculum. What do students learn, in which weeks, and how?
- Anything else you would like to discuss?
for the first question I'd add "why do we even care if universities are good places to learn programming?"
because that's where people go to learn programming
1
Is it possible for formal institutions to change course to incorporate the necessary changes, or is this not possible given the structure of academia?
I think it is possible but it requires a lot of work from the teacher side and from the University side, also it's about money...
(edited)
demetrispanos
for the first question I'd add "why do we even care if universities are good places to learn programming?"
I would assume it's because of the systemic changes to academia over the last 40 or so years, like you mentioned
we have been trained to think that a university is the path to success
ratchetfreak
because that's where people go to learn programming
right, I agree, but this could in principle change
demetrispanos
right, I agree, but this could in principle change
sure but that would require a mentality shift
so perhaps fixing the universities is not the most important avenue
I'm obviously biased here, having many friends and family in academia, but I think they are more in the right than in the wrong with the choices they (as professors) make
the problem is that people have expectations for CS departments that are not realistic
One synthesis (to borrow the term) of the discussion up to now seems to hint at a flow of:
show high impact early -> build a visceral understanding of why some of the abstract stuff matters -> drill to specific subjects -> spend lots of time practicing.
Maybe a flip on the university discussion is - where is the best place to facilitate this flow? (and does this synthesis seem right to yall?)
(edited)
demetrispanos
the problem is that people have expectations for CS departments that are not realistic
but they're sold that
I agree they're sold that, but people are not sold (for example) that getting an English Literature degree makes you a novelist
so it's not a fact of the universe, it's a fact of choices made in society
demetrispanos
so perhaps fixing the universities is not the most important avenue
I think Universities are still a strong point of reference for education, so, if their educational offer can be improved, it's a positive thing
1
raysan5
I think Universities are still a strong point of reference for education, so, if their educational offer can be improved, it's a positive thing
my point is that improvement presumes a goal, and I'm saying that for the university's true goal (advancing knowledge) they do an ok job
1
again, there is much blame to go around, but I don't think it's wise to expect universities to change their focus to be mainly about creating good programmers
1
i don't think universities necessarily need to change, societies perception and expectation of the them does
for sure the things that must be learned is learning and using a variety of api paradigms, dealing with an event loop (how to split processing up in multiple parts, wait for inputs, etc.), understanding how much performance is actually at their fingertips
it should be more socially and professionally acceptable to not go to university and to attend a trade school etc.
maybe the real lesson is universities shouldn't be the perceived route for becoming a developer
but learning more about computer science, or advancing the field
Rudy
maybe the real lesson is universities shouldn't be the perceived route for becoming a developer
this is, I think, the most important thing
the same could be said for many fields tbh! I feel like many of the issues with computer science education are shared by other fields
demetrispanos
again, there is much blame to go around, but I don't think it's wise to expect universities to change their focus to be mainly about creating good programmers
personally, the main lessons University taught me were not technical but being organized, responsible, punctual, to learn fast, to adapt to changes, identify key elements to learn... but I imagine not all the students learn the same way...
most people attribute their learning in college to those exact things
and almost never to the discipline they studied
i feel very similar in fact
because college is the first time they are free from the rigor of high school
also note most of those things could be learned in many other places
and I really thing that helps to be a better programmer
raysan5
personally, the main lessons University taught me were not technical but being organized, responsible, punctual, to learn fast, to adapt to changes, identify key elements to learn... but I imagine not all the students learn the same way...
as a counterpoint, for me personally, I learned an enormous amount of domain knowledge from my university courses
but as I mentioned in the podcast, I didn't study CS
I think university was the most efficient path by far for me to get the knowledge I wanted
2
demetrispanos
but as I mentioned in the podcast, I didn't study CS
I neither studied CS
raysan5
personally, the main lessons University taught me were not technical but being organized, responsible, punctual, to learn fast, to adapt to changes, identify key elements to learn... but I imagine not all the students learn the same way...
This is interesting in the context of more online/distributed/self directed learning. I feel like the biggest thing I learned from school was a work ethic (I certainly learned a ton of domain specific stuff) - but I wouldn't have gotten that if my school weren't so demanding.
(edited)
Rudy
Alright everyone, fishbowls normally run about 2-3 hours, and weโre about 1.5 hours in.
We have discussed the flaws in current software development training flows, we have discussed a little about what they do right. Letโs spend the remainder of the time discussing solutions. Things like:
- Is it possible for formal institutions to change course to incorporate the necessary changes, or is this not possible given the structure of academia?
- What would a โtrade schoolโ or โmusic schoolโ for software development look like? Be specific, imagine you were responsible for everything from the timeline to the curriculum. What do students learn, in which weeks, and how?
- Anything else you would like to discuss?
Jumping back to the second question - thoughts?
What would a โtrade schoolโ or โmusic schoolโ for software development look like? Be specific, imagine you were responsible for everything from the timeline to the curriculum. What do students learn, in which weeks, and how?
well, we can start from the closest things available, which I think are gamedev schools (the programming arms)
I don't have any direct knowledge of gamedev schools but it seems DigiPen produces at least some successful programmers?
Actually, I've been there. I worked for a "trade school" for 6 years, teaching multiple videogames development subjects and defining the syllabus for all of them. That school was the first in Spain offering a 2-years specialized course in Videogames Development.
(edited)
I'll reiterate:
for sure the things that must be learned is learning and using a variety of api paradigms, dealing with an event loop (how to split processing up in multiple parts, wait for inputs, etc.), understanding how much performance is actually at their fingertips
those are definitely second year subjects after they are comfortable with imperative programming already
ratchetfreak
those are definitely second year subjects after they are comfortable with imperative programming already
Do you have thoughts on how you do that first year?
assuming they come with blank slate at the very least teach them a language
ratchetfreak
assuming they come with blank slate at the very least teach them a language
actually this is a great point that I think we should explore, in comparison to music schools
I don't think there's a serious music school that accepts students who don't know either an instrument or composition already
I may just be underinformed
I mean, that's true of design school too - I had to have a portfolio to even apply
yeah sounds similar I just didn't know
my school was mostly art oriented, in terms of programming, they started with Programming I -> C basics (20h) + raylib (30h). Second subject, Programming II -> intro to OOP with C# and MonoGame (60h). Third subject: Unity (60h)
(edited)
no previous experience was required
demetrispanos
I don't think there's a serious music school that accepts students who don't know either an instrument or composition already
what about this did you want to explore?
greensleevless
what about this did you want to explore?
well, assumptions baked into what universities or other schools should expect
so I can tell you from direct experience, CS professors have no idea what to do with an introductory CS course
because half the students have been programming since they were 12, and the other half have never programmed before
ah yea - the intro courses I took actually let you test up into a more advanced intro course. (My problem was that the test was making a game, which I knew how to do, but the course was all algorithms stuff that I was horribly underprepared for XD)
and it's tricky to separate them out, because quite a few of those 12yo will still benefit from a course aimed at blank slates
^ yep - I was in that bucket. I had some pretty specific skills around game dev, but was in need of some application-oriented theory.
even late in the degree, the spread of programming fundamentals skill is enormous
it's quite ordinary to have a 4th year student who can only just barely create a working project from scratch
I guess the impact of that depends on how many of those students want to stay in university as a part of the 'knowledge development' institution vs go out and work right?
I mean, we know its not a good ratio, but that is a factor
yeah obviously if the goals are not around programming as a practice this isn't necessarily a problem
bringing this back to the discussion of an improved way of teaching software development: it'd be interesting to think about how you utilize that skill gap to teach some of the finer details. I'm thinking about how you could use something like @raysan5's project template to teach new students what a good project looks like, but then when they advance, have them create the template for new students so they start to understand what kinds of considerations lead to the systems baked into the template they learned from
teaching how to build APIs
greensleevless
bringing this back to the discussion of an improved way of teaching software development: it'd be interesting to think about how you utilize that skill gap to teach some of the finer details. I'm thinking about how you could use something like @raysan5's project template to teach new students what a good project looks like, but then when they advance, have them create the template for new students so they start to understand what kinds of considerations lead to the systems baked into the template they learned from
actually, in the University were I taught, students have several subjects connected along the 4 years, they have that template to start with but it evolves into a big engine with an IDE
at the end of the 3rd year, not much of the original code is still there
still, in terms of API design and architecture I think it can be greatly improved
raysan5
still, in terms of API design and architecture I think it can be greatly improved
do you have some specific things in mind?
well, not really because I was not allowed to do big changes...
University could be a bit reluctant to changes...
and more when those changes involve multiple subjects along 4 years
even in a field that is moving so fast
I just reread @Rudy's questions again and noticed: "What do students learn, in which weeks, and how?"
Could be fun to put together a curriculum in the time we have left?
Might be cheating for @raysan5
hahahaha... I was about to share the University one
haha or it'll just put our curriculum that much further ahead
greensleevless
I just reread @Rudy's questions again and noticed: "What do students learn, in which weeks, and how?"
Could be fun to put together a curriculum in the time we have left?
personally I think this is missing the forest for the trees, I don't think the main problem is that universities have mis-optimized their course sequences
(edited)
if the problem were that mundane it would be solved by now
I think there is a problem with throwing python at someone, having them type print("hello world") and telling them they wrote their first program
indeed the main problem is the parentheses
4
(sorry, language design joke)
hello world is nice but far from a "first program"
i don't really miss python2 too much
but i know some folks like our friend zed have picked that hill to die on
I do think there is a misconfiguration of courses to take someone from nil to competent developer
I do think it could be optimized
demetrispanos
if the problem were that mundane it would be solved by now
I think one problem with Universities is not the the syllabus but the teachers
It's difficult to find technically experienced teachers that can also teach and also have all the titles required to teach in the University
well a lot of that is just goal misalignment
the university is not especially interested in doing that
and there are very reasonable reasons, from a narrow perspective, for them to hold those views
demetrispanos
the university is not especially interested in doing that
but I think students require that kind of teachers to see the connection between their studies and the professional world
(edited)
I agree, but for reasons that are complicated and historical that's not what universities are
even though that is how they are sold to the public
1
ratchetfreak
hello world is nice but far from a "first program"
sorry I don't understand. Do you mean that it is far too simple to be meaningful?
bumbread
sorry I don't understand. Do you mean that it is far too simple to be meaningful?
it's going through the motions of setting up the environment and verifying that it worked
demetrispanos
even though that is how they are sold to the public
actually, many Universities here in Spain use that "connection with companies" for internships as a selling point
I wonder what the split is in acquiring skills between formal classes vs. the internships
ratchetfreak
I wonder what the split is in acquiring skills between formal classes vs. the internships
internship depends a lot on the company you get, in some companies you can really learn a lot
companies are supposed to teach interns but that's not always the case
yea - the degree to which companies prioritize mentorship / intentional design of the internship is really important. Really a lot of the things we've discussed here apply to internships with different priorities.
yes, one of the many problems involved here is the economics of training
1
it's a little tangential so I won't elaborate much, but given 1) programming skill can make you a good income, 2) teaching you programming skill takes a lot of effort from people who can make a good income, 3) teaching you to program doesn't guarantee you will program for me, then it's not surprising that training is spotty
selfishly, why should a business spend resources to make you wealthier with no guarantee they will get anything out of it
(obviously there are possibilities to recruit you down the line etc. I'm just giving the cartoon version)
Yea - especially when internships function just as well at snapping up already skilled workers earlier.
ah you got there before me sorry for reiterating
2) teaching you programming skill takes a lot of effort from people who can make a good income
this also applies to teachers...
(edited)
yes exactly, this is partly why it's hard to get good teachers no matter what the institution
1
and where the saying "those who can't, teach" comes from
(edited)
and the education quality problem intensifies...
teaching is also a very passionate job
speaking personally, the salary a full-time entry level professor had when I was at USC was about 30-40% of my total income as a professional ML/AI engineer
@demetrispanos it's the same in Spain... but not only for entry-level
you need to be a PhD to get a full-time position, if not, you are on contract per hours
places like HMN are interesting in this discussion since there's plenty of people who are very willing to teach on here - albeit in bite sized increments.
demetrispanos
yes exactly, this is partly why it's hard to get good teachers no matter what the institution
also the fact that being a pretty good teacher in a bunch of concepts across the board won't get you hired, but being an expert in ML and shit at everything else will
1
Rudy
also the fact that being a pretty good teacher in a bunch of concepts across the board won't get you hired, but being an expert in ML and shit at everything else will
yes also true
Thereโs also name bias, in both people and schools - i.e you might have a research paper with strong results but it will immediately met with more scrutiny than a paper submitted from an Ivy League, or even if youโre the 5th author on that paper, or if the author is a big name in the field.
Rudy
Thereโs also name bias, in both people and schools - i.e you might have a research paper with strong results but it will immediately met with more scrutiny than a paper submitted from an Ivy League, or even if youโre the 5th author on that paper, or if the author is a big name in the field.
that's one thing that I don't like from University...
1
Itโs really all pretty unfair, and counterintuitive to promoting the best possible advancement in any field
Especially when the vast majority of your PhDs are indeed โtrue believersโ
@Rudy @demetrispanos @greensleevless @ratchetfreak @bumbread hey! I'm afraid I have to go...
2
thanks for joining @raysan5 ! It was an honor
1
Yea same here (in the middle of moving) - this has been wonderful yall! Thank you!
thank you very much for the fishbowl, it was great! see you around!
It's about the stop time anyway so I'm okay with wrapping up the official discussion and moving anything residual to #fishbowl-audience as we're losing participants
1
yeah if there's nothing else pending, sounds good to me
Really appreciate everyone who was willing to participate.
All right then, thanks for participating, everyone!
3
3
And you can see all our other fishbowl conversations by checking the pinned messages!