Behold, the first piece of the the trans-dimensional Hitchhiker's Guide. One of the first things it has to do is figure out is which way time runs in whatever reality it finds itself in.
The real reason there isn't in AP computer science in schools is simple.
Think about most teachers you knew in HS. They probably taught multiple classes, and probably taught at least one main class (a general math, science, history, or language course).
So, you want to add a new computer science class to the curriculum.
Well, you can't hire a programmer or a CS degree holder, for the most part. They make too much money to work part-time.
You can't hire them full time... you only need them for 2 or 3 classes, and the rest of the general classes are handled. Maybe they'll pick up a study hall and a special projects course... but they also get paid less for those courses/periods too.
And you can't find a "normal" teacher that also knows computer science.
I suspect this problem will get easier once we start getting more CS retirees... I would imagine part-time teaching would be an attractive option for side income.
This seems like it's comparably priced with the X1 Carbon Touch... a good system will run you around $1700 for either option. The main difference is display... the bigger X1 sacrifices resolution. It just seems really expensive for a tablet, and really tiny for a laptop for serious work, it's like it's in an anti-Goldilocks zone.
I'd use this only if I had an awesome docking rig, and really needed a tablet, *and* I needed to be able to swap between the two seamlessly.
The question isn't about finding programming competence anymore... you can weed out people that can't figure out (or know) a decent algorithm off the top of their head.
The question is a matter of engineering skill: if you can't make an application that's architecturally coherent, properly sanitizes inputs, decomposes functionality, behaves intuitively for the user, anticipates future needs and builds in that flexibility in the API, is easily deployable in your org (or to the client), and all with proper documentation, etc. etc. etc. you are a programmer.
These are all completely different skills than simple programming... it's the difference between wiring a house and designing a fault-tolerant power distribution system that plans for future capacity over 5 states.
We have enough programmers.
We need engineers. It would help if business in general thought of programmers as global data and process engineers, rather than simple wish-fulfillment elves for whatever they want to see on their screen using whatever software their buddy in company X sells.
Are you trying to practice basic coding and logic skills?
Project Euler, as many have said, or similar sites.
Are you trying to learn a specific technology?
Then go through a tutorial. Notice anything stupid/wrong/incomplete/ambiguous about that tutorial? If not, please share this unique example of completely flawless information transfer between humans. Otherwise... rewrite it yourself, in your words. Think about other directions the tutorial could have taken. Tinker and experiment.
Are you learning programming to accomplish a specific task?
In that case, you already have your answer. Write what you can. Learn to write the other parts. The code will grow as you grow.
Think about programming like carpentry. If you want to do a carpentry project, you can choose:
1) An design that emphasizes core skills, but isn't particularly useful, although it isn't *useless*. In carpentry, that would be a puzzle box, or a birdhouse, or some other small bauble. The goal was to perfect tool usage, not produce something useful. That's like Project Euler stuff.
2) A design that emphasizes one particular tool, but because of that isn't particularly practical either, and almost completely useless. You know, some complicated, ornate thing that's only meant to really show off a scroll saw, or using a lathe to make a complicated-looking curtain rod. That's like the tutorial option.
3) You build a simple table... even if it's just four 2x4s screwed to a piece of plywood and doesn't even bear loads well. You work up from there... you learn about cross bracing and railing. The screws are ugly, so you learn about countersinking and hole plugs. You might even have to start from scratch, but that's OK... you'll redo everything twice as fast the second time. Then maybe you route the edges of the table when you learn to use a router so you have a nice beveled edge. Then maybe you buy a lathe, and turn the legs of the table into something more fancy... and then you add scrollworked cross-braces... That's a real world project.
All three of these will help you become a better carpenter/programmer, but you will never become a master carpenter/programmer until you do option 3.
I'm not sure exactly where he wants to use this... as a new constraint system for a database or something?
Yeah, that's the ticket... stuff more business logic in the database. I have yet to see a system designed by DBAs around stored procedures as "the way all systems should integrate" that was remotely usable.
Databases are not good development platforms.