# I am the Watcher. I am your guide through this vast new twtiverse.
#
# Usage:
# https://watcher.sour.is/api/plain/users View list of users and latest twt date.
# https://watcher.sour.is/api/plain/twt View all twts.
# https://watcher.sour.is/api/plain/mentions?uri=:uri View all mentions for uri.
# https://watcher.sour.is/api/plain/conv/:hash View all twts for a conversation subject.
#
# Options:
# uri Filter to show a specific users twts.
# offset Start index for quey.
# limit Count of items to return (going back in time).
#
# twt range = 1 48
# self = https://watcher.sour.is/conv/okoq7yq
Got a friend asking me for help with their final C programming exams which they failed 8 times (yes, 8 π€·).
The situation is bad, seeing him execute source.c
without compiling it made me feel things. π₯²
I'm not proficient in C myself but thanks to Go I got the essential quickly...
Does anyone have any ideas for some small projects to build in C that looks interesting to make?
@justamoment Oh good lord π³ Learning C is _actually_ quite simple, but doing anything remotely useful and interesting in such a low-level language in IMO insane. It's basically the equivalent (it actually is) Assembly. -- That being said, I would recommend writing a few CLI tools, filters, processors, whatever. I wouldn't attempt anything more complex/elaborate than this given that he/she/her/them/whatever are struggling with even basic compilation π
-- Also ditch C, learn Go. There is no job out there (besides low-level embedded programming) that requires you to be proficient at C, even in the embedded field you can write Go and compile with the Tiny Go compiler which supports a growing number of micro processors and controllers π
@justamoment Oh good lord π³ Learning C is _actually_ quite simple, but doing anything remotely useful and interesting in such a low-level language in IMO insane. It's basically the equivalent (it actually is) Assembly. -- That being said, I would recommend writing a few CLI tools, filters, processors, whatever. I wouldn't attempt anything more complex/elaborate than this given that he/she/her/them/whatever are struggling with even basic compilation π
-- Also ditch C, learn Go. There is no job out there (besides low-level embedded programming) that requires you to be proficient at C, even in the embedded field you can write Go and compile with the Tiny Go compiler which supports a growing number of micro processors and controllers π
@justamoment Oh good lord π³ Learning C is _actually_ quite simple, but doing anything remotely useful and interesting in such a low-level language in IMO insane. It's basically the equivalent (it actually is) Assembly. -- That being said, I would recommend writing a few CLI tools, filters, processors, whatever. I wouldn't attempt anything more complex/elaborate than this given that he/she/her/them/whatever are struggling with even basic compilation π
-- Also ditch C, learn Go. There is no job out there (besides low-level embedded programming) that requires you to be proficient at C, even in the embedded field you can write Go and compile with the Tiny Go compiler which supports a growing number of micro processors and controllers π
@justamoment Oh good lord π³ Learning C is _actually_ quite simple, but doing anything remotely useful and interesting in such a low-level language in IMO insane. It's basically the equivalent (it actually is) Assembly. -- That being said, I would recommend writing a few CLI tools, filters, processors, whatever. I wouldn't attempt anything more complex/elaborate than this given that he/she/her/them/whatever are struggling with even basic compilation π
-- Also ditch C, learn Go. There is no job out there (besides low-level embedded programming) that requires you to be proficient at C, even in the embedded field you can write Go and compile with the Tiny Go compiler which supports a growing number of micro processors and controllers π
@prologic I know, he even dropped python in class because there was "too much" he said. π
The only real case I could think is something like a game or something but it's still a mess not being experience myself I don't want to bother too much.
I ever thought of using wasm to make something in a web page but I might give his teachers an heart attack. π
Still he needs C to pass the exam for now.
Just to note, the exam is like this:
- Load a text file
- Read the numbers in it
- Print the highest number
That's what that university asks to graduate as a tech engineer. π₯²
No wonder he said he made an app in python and the source was made of only print()
calls. π€£
@justamoment Oh dear π
I'm not sure how we can help to be honest π€ Is your friend a top-down learner or bottom-up? π€ (learns as a whole or needs everything to be broken down)
@justamoment Oh dear π
I'm not sure how we can help to be honest π€ Is your friend a top-down learner or bottom-up? π€ (learns as a whole or needs everything to be broken down)
@justamoment Oh dear π
I'm not sure how we can help to be honest π€ Is your friend a top-down learner or bottom-up? π€ (learns as a whole or needs everything to be broken down)
@justamoment Oh dear π
I'm not sure how we can help to be honest π€ Is your friend a top-down learner or bottom-up? π€ (learns as a whole or needs everything to be broken down)
@prologic I'm not sure myself, we just started talking about it for a single day but I didn't see any of his actual reasoning and coding yet.
I personally learn by doing: make something you want and learn how on the run, that was my idea for him too.
I also asked him what would be interesting to make for him personally and then start from there.
@justamoment Yeah I also find the best way to learn is by doing. Its one thing to learn a pile of theory, but if you don't do anything practical with it, your brain will just forget what you've learned π€£
@justamoment Yeah I also find the best way to learn is by doing. Its one thing to learn a pile of theory, but if you don't do anything practical with it, your brain will just forget what you've learned π€£
@justamoment Yeah I also find the best way to learn is by doing. Its one thing to learn a pile of theory, but if you don't do anything practical with it, your brain will just forget what you've learned π€£
@justamoment Yeah I also find the best way to learn is by doing. Its one thing to learn a pile of theory, but if you don't do anything practical with it, your brain will just forget what you've learned π€£
@justamoment You have a hard task. Maybe let him try to reprogram wc
, but if he even fails at the much simpler exam, it's going to be very, very tough.
@justamoment hmmm... I learned C for microcontrollers (I loved it coming from assembler) something like 20 years ago.
But currently, I don't feel incentivized to do something interesting for PCs, and for microcontrollers they went to MicroPython and some others. I agree with @prologic says that is too low-level.
What I can suggest is reading _Head First C_, which has been to me a good starting point for new languages. I think they could take a look to pass the exam
https://www.oreilly.com/library/view/head-first-c/9781449335649/
I know a lot of tech engineers don't want to create stuff by programming, but more to give maintenance to current systems, and that's OK
Although I tell my students "at least try to pass this requisite", it's gonna help to understand how programmers think.
@justamoment hmmm... I learned C for microcontrollers (I loved it coming from assembler) something like 20 years ago.
But currently, I don't feel incentivized to do something interesting for PCs, and for microcontrollers they went to MicroPython and some others. I agree with @prologic says that is too low-level.
What I can suggest is reading _Head First C_, which has been to me a good starting point for new languages. They could take a look to pass the exam, I think
https://www.oreilly.com/library/view/head-first-c/9781449335649/
@justamoment hmmm... I learned C for microcontrollers (I loved it coming from assembler) something like 20 years ago.
But currently, I don't feel incentivized to do something interesting for PCs, and for microcontrollers they went to MicroPython and some others. I agree with @prologic says that is too low-level.
What I can suggest is reading _Head First C_, which has been to me a good starting point for new languages. I think they could take a look to pass the exam
https://www.oreilly.com/library/view/head-first-c/9781449335649/
I know a lot of tech engineers don't want to create stuff by programming, but more to give maintenance to current systems, and that's OK, but I tell my students, to at least try to pass this requisite.
@justamoment hmmm... I learned C for microcontrollers (I loved it coming from assembler) something like 20 years ago.
But currently, I don't feel incentivized to do something interesting for PCs, and for microcontrollers they went to MicroPython and some others. I agree with @prologic says that is too low-level.
What I can suggest is reading _Head First C_, which has been a great starting point for new languages. They could take a look to pass the exam, I think
https://www.oreilly.com/library/view/head-first-c/9781449335649/
@lyse It's a danger someone should takeπ
@lyse It's a danger someone should take π
@eaplmx Thanks for the tip!
He's already working in a software company as a tester (but can't access any code).
And reached out to me for help to become better at something he's bad at, so the excitement and an helping hand should push him to have proper interest on coding in general, as I said he's now stuck in C but I hope he'll get to a point where what language he knows at the time won't stop him to learn something easier and more versatile.
For now I'll see what he wants to build and start from there.
I'll let you know what he manages to pull off.
it'll be a long journey
An update on the situation, got him to answer a little quiz on basic knowledge of programming as an assessment and the results were..... catastrophic. π«£
I think we're going to learn programming from the zero.
When I think back to the exams, now that I've seen his skills, could it be that the university lowered their expectations about their students because of their nonexistent interest?
As I said, he seems interested because he saw a software being built at his company, the time prior to that might have been just wasted time of doing nothing...
@justamoment Definarely possible the University had failed here π
@justamoment Definarely possible the University had failed here π
@justamoment Definarely possible the University had failed here π
@justamoment Definarely possible the University had failed here π
@justamoment When I studied software engineering at the uni, they claimed they start teaching programming right from zero, so everybody who had never programmed anything before will have a chance to pick up. They did, but at such speeds that this did not really work out. All my fellow students who didn't program already at school failed or broke away. Except for maybe three people in this category.
In the first semester there were about 250 students in total, SE and CS combined. Around 50 made their diploma, I'd say. Maybe even less. In technical or science uni courses you gotta have to bring some passion. Rather great passion. Granted, not all failed due to programming, also maths and theoretical computer science were some common tough nuts to crack. However, I bet programming played often a larger role for the unexperienced students.
Bottom line is: Passion is key. You gotta have to find it interesting. Otherwise chances to success are slim. Good luck teaching your mate. Which project(s) have you settled on to tackle?
@lyse I had a similar experience myself when studying Software Engineering also back in the day. Same sort of thing, similar numbers, not much "Programming" courses in the first two years, only really in the 3rd and 4th years.
@lyse I had a similar experience myself when studying Software Engineering also back in the day. Same sort of thing, similar numbers, not much "Programming" courses in the first two years, only really in the 3rd and 4th years.
@lyse I had a similar experience myself when studying Software Engineering also back in the day. Same sort of thing, similar numbers, not much "Programming" courses in the first two years, only really in the 3rd and 4th years.
@lyse I had a similar experience myself when studying Software Engineering also back in the day. Same sort of thing, similar numbers, not much "Programming" courses in the first two years, only really in the 3rd and 4th years.
@justamoment as an university professor, I've found that classrooms are the worst place to learn to code, program or dev.
There is not enough time to personalize teaching, from the current knowledge every student has, up to the semester goals (usually standardized). People is stressed on learning a lot in a few months, throwing up everything into the exam, so usually that isn't meaningful and internalized learning which programing requires in the long term.
What has worked for me was to record short videos with step by step explanations, so the students can watch and rewind at their pace, and then we have office hours to explain anything the student didn't get.
Something like:
1. Watch how I do it
2. Try to repeat that
3. Try to do something different alone
4. You are by yourself now!
I've also found that, at least here, Computer Science or (Management of) Information Tecnologies are not related to creating or architecturing software, but on understanding and maintaining current ones.
Which is not that bad, you cannot create something if you don't know previous solutions or implementations... π€
Again, there is simply not enough time in 3-5 years of intense education to learn to 'program'
@prologic In the first semester there was a mandatory programming course everybody had to attend. Weekly tasks had to be solved and handed in in groups of three. One good person (A)ΒΉ, one medium (B) and one with next to no previous knowledge (C). The idea was that the As transfer their knowledges to the Bs and Cs. This kind of worked, but of course the available time by far was not enough. Like any practical skill, you only learn it by actually doing it. And that just takes time. A lot of time. Those were small, basic tasks, like implementing doubly linked lists on your own, hash tables, sorting algorithms etc.
A bit later (maybe third semester?) there was a mandatory program development course where you had to write some a bit more real programs, again, in teams of three. However, you could chose your mates yourself. We had to code a desktop wine cellar management software (we named ours "Essig" β vinegar ;-)) and a tool that assisted at doing reviews in general, another desktop UI, too. Both times XML schemas were given to all teams to be used as the same data storage format.
Then in main courses there were two software internships. Team sizes were about 10-12 people if I remember correctly. The first one was an Eclipse plugin to manage softwares under test in the distributed systems department's own cluster. That was really cool, I learned a whole lot. The second one was a rather quick win for us, as we had to write a configurable poll system for the traffic department, so they could use that for their more complex traffic surveys. I didn't learn anything new except that Typo3 is one the worst products out there. It should be burned in hell.
ΒΉ: My mate was the only one remaining in the original triad in the very first week of the first semester. Not even five days in. Both his assigned fellow students realized that they had to program in software engineering and decided that this wasn't their cup of tea. No idea what those idiots thought when they enrolled. No, these weren't the only ones, it happend in several other teams as well.
@lyse He explained his project idea.
A PDF parser that read texts but extract it like a chessboard.
I'm a bit confused and we didn't met yet, so for now I'll take it as a parser for a table (the chessboard).
@eaplmx Your approach is really smart on the time constraint.
It might be hard to follow without the essentials, at that university they never ever worked with a project with more than one file, even if someone is interested it's hard to work on something that reflect a realistic case in those circumstances.
They're probably on their own I think, hope I can help him to get better at it.
@lyse Getting help from someone you work with is great, it's like working with colleagues.
I personally learned my first programming language (Python), on my own with some random video tutorial, by following them, repeating, analysing the results and breaking apart all I just made to see what worked and what didn't.
I still use this approach up until now, with my little journey in Go for example. πβοΈ
@justamoment I don't get the project idea, but it sounds like a more complex thing. Anyways, have fun! :-)
I started out with Delphi in school and played around with it at home for many, many hours. I didn't produce really useful things, but I was having a great blast experimenting. Information technology basic course in school ruined me. :-D I was very fortunate to have two absolutely great CS teachers. I owe what I do now to them.
@lyse That's a great story, my colleague at work started with basically nothing and I carefully explained literally anything he saw on screen and thanks to his passion we're now working side to side.
@justamoment That's really great. I also had and have some amazing workmates who taught me a lot and still do. Nothing beats decades of experience and constantly setting examples of good approaches.
@lyse More than the approach itself I mainly share my own struggles and my experiments on how to fix them.
I have a routine of "breaking the status quo" for my workflow just for get smarter and better, and eventually share them with others.
@justamoment yeah, the compromise between the essentials, or the foundation to build knowledge on top of it, is tricky.
And I also agree on teaching to do something realistic.
Currently I'm designing a course from scratch for C# and I'm constantly saying "don't validate this yet", don't preoptimize this now... We've known for years all that real software needs, but at the same time we have to 'lower' the implementation to the current level.
It reminds me when I was learning piano. Yeah, I wanted to play the classics or the modern tunes, bu instead as my fingers where pathetic I had to practice with boring and monotone scores to build dexterity for my hands.
I think that's something similar with programming, language learning and such. And again, college gives no time for that.
More anecdotal evidence: I was 3 months in German at college, at the 1st semester, really stressful due to the scholarship. I learned nothing.
@eaplmx When I started learning to play the guitar at school I got so hooked I ended up being able to play flamenco songs in around a month since starting, meanwhile all my classmates couldn't do even the basics chords, I guess my best ability is to learn and experiment in a obsessive matter by myself until I get it right.
But I need to avoid at all cost to push this approach onto others as often they can't keep up with my pacing.
As a solution I found that drawing is the best way to explain things to me, since i get slowed down by my hands focusing on the current sketches and it also help them understand what's happening in code or other structures visually.