Notes on Codecademy "Learn Node-SQLite"
After my SQL fresher course, shortly after learning Node.js, I thought the natural progression was to put them together with Codecademy's "Learn Node-SQLite" course. The name node-sqlite3
is not a mathematical subtraction but that of a specific JavaScript library bridging worlds of JavaScript and SQL. This course was a frustrating disappointment. (Details below) In hindsight, I think I would have been better off skipping this course and learn the library outside of Codecademy.
About the library: Our database instructions such as queries must be valid SQL commands stored as strings in JavaScript source code. We have the option of putting some parameters into those strings in JavaScript fashion, but the SQL commands are mostly string literals. Results of queries are returned to the caller using Node's error-first asynchronous callback function convention, and query results are accessible as JavaScript objects. Most of library functionality are concentrated in just a few methods, with details available from API documentation.
This Codecademy course is fairly straightforward, covering the basics of usage so we can get started and explore further on our own. I was amused that some of the examples were simple to the point of duplicating SQL functionality. Specifically the example for db.each()
shows how we can tally values from a query which meant we ended up writing a lot of code just to duplicate SQL's SUM()
function. But it's just an example, so understandable.
The course is succinct to the point of occasionally missing critical information. Specifically, the section about db.run()
say "Add a function callback with a single argument and leave it empty for now. Make sure that this function is not an arrow." but didn't say why our callback function must not use arrow syntax. This minor omission became a bigger problem when we roll into the after-class quiz, which asked why it must not use arrow syntax. Well, you didn't tell me! A little independent research found the answer: arrow notation functions have a different behavior around the "this
" object than other function notations. And for db.run()
, our feedback is stored in properties like this.lastID
which would not be accessible in an arrow syntax function. Despite such little problems, the instruction portion of the course were mostly fine. Which brings us to the bad news...
The Code Challenge section is a disaster.
It suffers from the same problem I had with Code Challenge section of the Learn Express course: lack of feedback on failures. Our code was executed using some behind-the-scenes mechanism, which meant we couldn't see our console.log()
output. And unlike the Learn Express course, I couldn't workaround this limitation by throwing exceptions. No console logs, no exceptions, we don't even get to see syntax errors! The only feedback we receive is always the same "You did it wrong" message no matter the actual cause.
Hall of Shame Runner-Up: No JavaScript feedback. When I make a JavaScript syntax error, the syntax error message was not shown. Instead, I was told "Did you execute the correct SQL query?" so I wasted time looking at the wrong thing.
Hall of Shame Bronze Medal: No SQL feedback. When I make a SQL command error, I want to see the error message given to our callback function. But console.log(error)
output is not shown, so I was stabbing in the dark. For Code Challenge #13, my mistake was querying from "Bridges" table when the sample database table is actually singular "Bridge". If I could log the error, I would have seen "No such table Bridges" which would have been much more helpful than the vague "Is your query correct?" feedback.
Hall of Shame Silver Medal: Incomplete Instructions. Challenge #14 asked us to build a query where "month is the current month". I used "month=11" and got nothing. The database had months in words, so I actually needed to use "month='November'". I wasted time trying to diagnose this problem because I couldn't run a "SELECT * FROM Table" to see what the data looked like.
Hall of Shame Gold Medal Grand Prize Winner: Challenge #12 asks us to write a function. My function was not accepted because I did not declare it using the same JavaScript function syntax used in the solution. Instructions said nothing about which function syntax to use. After I clicked "View Solution" and saw what the problem was (image above) I got so angry at the time it wasted, I had to step away for a few hours before I could resume. This was bullshit.
These Hall of Shame (dis)honorees almost turned me off of Codecademy entirely, but after a few days away to calm down, I returned to learn what Codecademy has to teach about PostgreSQL