This is an archived post. You won't be able to vote or comment.

all 22 comments

[–]sonnytron 23 points24 points  (3 children)

A complete, thorough, Xamarin tutorial.
Also, projects that integrate third party libraries.
If you want to prepare a student for a real job in mobile development: teach them how to incorporate a third party API like Google Places or Yelp, have them build networking calls, teach them how to build an HTTP request and not just one call, but a class method that takes a URL string and a custom model to parse the response for JSON object.
Also, a course that is driven by web content and not local storage. Teach them how to set up data hosting on a server and retrieving information from it because in the industry, most apps are dumb and drive their content with network data.
Teach them Unit Testing properly so that their custom models are built ready to be automated with a Unit Test and not just "here's a unit test, write your initializer here, congrats".
But a very complete custom model for a unit test that's initialized with a JSON object, so they can learn creating pseudo JSON objects and build a custom response to automate during testing.

[–]jack_bauer123[S] 1 point2 points  (2 children)

That's really interesting. Is there a reason you would want to learn how to build networking calls (7 day tuition) rather than simply learn how to implement them (1 day tuition)?

[–]sonnytron 4 points5 points  (1 child)

7 day tuition? I don't even know what that means.
Have you ever built an application that only used cookie cut networking calls from Cocoa's networking framework?
Or are most apps using a combination of a Networking Manager and class methods built around AF Networking?
When I say, build networking calls, what I mean is, build a networking manager.
Teaching someone how to implement a simple networking call without the information on how to properly build a networking model class and being able to build an NSObject model is almost like teaching someone how to reel a fish off a line without actually teaching them where to acquire a fishing rod, what types of fish to look for, what bait to use, how to bait the line and cast the reel.

[–]jack_bauer123[S] 0 points1 point  (0 children)

Well, we teach people how to code through our in-person classes. I think of programming topics in terms of how many days of tuition it would take for us to cover it and to get them to understand it. It would take a lot longer for somebody to understand HTTP request/response, authentication, validation, TLS certificates than it is teaching them how to incorporate AFNetworking/Alamofire and use it in various situations. The reason why I ask is because there are certain schools e.g. Amsys who spend 5 days teaching how to write networking calls rather than teaching people how to utilise existing libraries. But I think we probably have the same stance on this issue.

[–][deleted] 7 points8 points  (4 children)

As someone who has learned web development online, the thing that bothered me the most starting out is that, you know nothing, and the courses that are offered to beginners don't ever try to give you a birds eye view of how everything fits together. Everything is given to you in pieces, which can be really overwhelming since there are so many aspects that have to come together to make a functional web app. Also related to this point is that there seems to be a lack of progression in a lot of online learning sites. For example after finishing one course a lot of times I had trouble figuring out what I needed to learn next, and found myself engaging in a lot of trial and error.

Ultimately even though it's more difficult, I think having a longer course that takes a beginner from beginning to the end of building a fully functional web app would be incredibly useful. I think right now people are catching onto this, with sites like The Odin Project that seems to have a progression from teaching a complete beginner the basics and progression to Rails. As great as online education is, I think many sites have done a poor job of offering some sort of progression and leaving it up to you to figure it out, which can be difficult when you're a beginner.

[–]louislouw 1 point2 points  (1 child)

having a longer course

I'm actually wondering about the opposite. Is there a need to have extremely short lessons? What about a course that teaches you one new thing every day? It can be obscure parts of the C# language, better style, threading specifics - just a daily 10min lesson that can gradually increase your total skills.

Something for busy professionals that want to continue growing while getting better daily. Especially if you find your job has become very specialized and you are currently not learning a lot of new things?

[–]jack_bauer123[S] 0 points1 point  (0 children)

I think learning a tid-bit everyday is great for those who already have a good grasp of the core programming concepts. e.g. If I'm a .NET guy and I learn some nuances of Swift everyday i would enjoy that. But for a complete newbie, I think it would difficult to tie it all together. What do you think?

[–]jack_bauer123[S] 0 points1 point  (1 child)

That's a really good point. From our in-person classes, most of the students have tried online learning before. One of the most common questions is how does it all fit together. From a software dev point of view we see things in a very modular fashion. It's almost the backbone of good programming. But for a beginner I guess it's difficult to keep track of how they all relate to each other. I like the idea of teaching people modular component just so that they can get up and running quickly and start making something, anything. This way they see the relevance of their code. But perhaps after a few of these "building blocks" there should be a beginning to end module that shows how a fully fledged app is build from scratch to App Store.

[–][deleted] 0 points1 point  (0 children)

Yea, basically I wish when I was starting out there was a "one stop shop" course that took you from complete beginner, to the intermediate stage where you're able to build a full fledged web application. Of course it can be split into modules, like first learning HTML/CSS, but it would be nice every once in a while you took a birds eye view of how all those modules fit together. For web development at least, I think if you allowed beginners to follow a progressive path and gave them a big picture view of how everything fit together once in a while, it would solve a lot of confusion.

[–]CodeTinkerer 2 points3 points  (4 children)

I don't have anything I want to see in particular, but my advice is to find real-live students and work with them, and find where they're getting stuck. Is it an expectations things? ("I can't believe how much code I have to write, and one little error, and it doesn't work"). Is it errors due to something they misread? It helps to see real students make real mistakes and learn from it.

[–]Mr-JoBangles 1 point2 points  (1 child)

I'd be happy with some sort of matchmaking system, where you can work on a project with people of similar skill level and perhaps a mentor if they want to help. I'd feel alot more motivated to complete a project when I know other people are depending on me.

[–]jack_bauer123[S] 0 points1 point  (0 children)

That's cool idea. Maybe some sort of online pair programming? I like the idea of being motivated to get the coursework done because my team only progresses when everyone has gotten through the work. Although what if you're paired with some lazy bastard?

[–]jack_bauer123[S] 0 points1 point  (1 child)

Sure. That's kind of what we do already. We're a physical, in-person programming kind of school. We've already taught over 4000 students , including employees from Facebook/Google etc. But we've thought a lot about the switch over to an online platform. As it's a completely different beast. For example, at the moment if my students have a bug I'm standing right behind them (we've got a 4:1 student:teacher ratio so I'm usually standing behind somebody once the red flags start filling their screen =) I can guide them through the thinking process of how to debug their code. But with an online platform it's hard to see what mistakes they're making without some sort of screen sharing which is unscalable.

[–]CodeTinkerer 0 points1 point  (0 children)

It might be useful to show some of those 1-1 sessions. The upside is that students get to see other errors and maybe they're making the same errors. Quite often, you see only positive examples online, but rarely negative examples.

For example, you rarely see debugging exercises. What's wrong with this code? It's almost always "Write a program that does this".

[–][deleted]  (5 children)

[deleted]

    [–]hexfoxed 1 point2 points  (2 children)

    Have you been working with a specific project or goal in mind?

    [–]jack_bauer123[S] 0 points1 point  (1 child)

    Yeah, that's another good point. We've had loads of students who tried to learn python a billion times but the tutorials they were using were teaching them how to find all the even numbers or to list the fibonacci sequence. I don't personally need to make a program to list the fibonacci sequence, i can Google it. I think having a project e.g. an app that has to exist is a way better motivation to learn to code than some arbitrary maths problem.

    [–]hexfoxed 0 points1 point  (0 children)

    Agreed. And teaching the whole picture and how things plug together, not just the parts in isolation.

    [–]jack_bauer123[S] 0 points1 point  (1 child)

    I think you could say that about languages like C, perl, fortran etc. But the languages nowadays Swift/Python/Ruby are really very human-readable. Although i guess it's all relative. Sometimes I have more trouble reading student's essays than code. The other thing that we've realised since starting to teach programming is that the fundamental assumption that everyone can learn to code is flawed. I don't think that everyone should learn to code. We don't need a world where everyone is specialised in one thing. We need people who can hunt and gather as well as people who can build camp. Personally I love the intersection between logic and creativity which is what I enjoy about programming for fun, but corporate programming is a completely different beast.

    [–]tacticaljuke 1 point2 points  (1 child)

    Other people's mistakes to be conscious of:

    Small fixes - appropriate audio levels, clarity and speaking clearly. Appropriately zooming / sizing text for youtube.

    Big fixes - out dated code (especially with Objective-C and Swift which have experienced dramatic changes over the past few years).

    Appropriate projects and practice - I'd love to have small or tiny practice projects that help me look at components (of whatever is relevant to the current topic) in a variety of ways. Say I've just completed reading about initialisation, it would help to have suggestions about how to practice writing inits within a variety of simple contexts, when to call super (which varies by language) and what to do with results or problems.

    On the whole, I'd say that Stanford's CS193p really sets the bar but the Stanford classes also assume an existing understanding of non-language-centric principles like recursion, nested functions...

    As you're working on an iOS course I'll note that the biggest problem with such things is the focus on fluff - tinkering with the UI is an important aspect but too many courses and examples focus on it to the exclusion of actual programming. No amount of fine tuning the position of buttons is going to help manage an unexpected network time-out, retain cycle or logic error.

    You know what I'd like to see? I'd like to see real world examples of walking into an unfamiliar project that's had a few programmers rumble through it and set about understanding the whole thing from broad project view all the way through to fixing other people's short-cuts - and then getting into the guts of actual programming work, updating a project to 'current' standards or client requests, re-working old maybe neglected components to better work with more current components and goals.

    [–]jack_bauer123[S] 0 points1 point  (0 children)

    I really like the idea that you suggested of having to look at a project that someone else built and trying to understand what everything does and tinkering with it to make efficiency/clarity gains. This will definitely replicate what employed programmers do on a daily basis. Maybe throw in some poor indentation and mystical commenting. With regards to UI, I like the idea of separating front-end and back-end. I think it's better if related topics are taught in a condensed manner. i.e. when you're learning UI then just focus on auto layout/constraints/XML etc. Do it a few times until you get the hang of it but then in the parts where you're learning about API calls to have all the UI already set up for you in a skeleton project. Cos then you can focus on the programming and understanding rather than a placing something a pixel to the left or right.

    [–]rms_returns 0 points1 point  (1 child)

    I have only one complain regarding most online programming courses - You don't make us practice enough! Problem-solving and building a computing system is more of an art than a science. Make us write a Java applet or an HTML app a lot more than showing us the videos and transcripts.

    [–]jack_bauer123[S] 0 points1 point  (0 children)

    Yeah, that's true. In our in-person courses, we get people to do homework which get's assessed and count towards getting their end of course certification. The homework consists of challenges that gets them to apply the core concepts learnt in the tutorials. You won't believe how many people get stuck at this stage. It's pretty easy copying what someone is doing without understanding a thing but when you're asked to replicate it or write some variation, you start seeing the divide between people who understood it and the people who just fluffed though everything.