461 karma · joined August 4, 2011
- does the turnstile example in the article actually need a state machine? When you insert a coin it unlocks, when you push it locks. No need to remember the state you are in.
- in the data-fetching example, it says that in the "fetching" state it is not /accepting/ any clicks. But then shouldn't this be explicitly specified in the state machine, by having the click event loop back into the fetching state? I think it would be less error-prone and more systematic to account for all the events in all the states.
I've been seeing this TDD process in a lot of things lately. Scientific progress seems to follow the same process as well (at least that's one way to capture what Popper or Lakatos have been telling us, not that I've actually read them yet mind you).
GM_of_Team A > GM_of_Team B iff (endofseason_ranking (A) > endofseason_ranking(B)) and (budget(A) < budget(B))
So this would capture how much "bang for the buck" a GM is getting. I did it for a couple of years, and not surprisingly, there's quite a bit of year-to-year variability. Teams go through cycles where they increase the budget to capitalize on a favorable situation, but then they get saddled with bad contracts and are disadvantaged in the draft, etc. Still, if you do this over the long term, there could some teams/GMs that are consistently good.
I remember that my first attempt generated really busy diagrams because the ordering is transitive, so if you simply draw an arrow whenever the ordering holds you end up with the transitive closure. A couple of hacks later (basically, add a test to check if this ordering can be obtained by triangulation, and if so, don't display it) I managed to end with the same kind of diagram as the OP.
In the interview, he mentions himself that Node was inspired by Nginx.
Now this is all my own experience, and others may disagree, so don't necessarily go changing things just on my account!
The diagrams are clear and helpful.
Only nitpick: not sure how somebody who is supposed to learn what an array is by reading this is supposed to already know the meaning of Big O notation. So maybe a little intro to Big O complexity somewhere in there would help as well.
Software development is more reliant on discrete math (and more generally the ability to reason abstractly) than math that helps model the physical world. Hopefully, Professional Engineering bodies will one day realize this and will adapt their program accreditation criteria accordingly.
I think it comes down to new non-functional requirements: safety, environmental concerns, accessibility, liability protection, etc. With these requirements, Paris or London or New York would have never had a subway system in the late 1800's or early 1900's. By now though, all these systems have been maintained and modified to comply to the new non-functional requirements over time.
So if you added the accumulated cost of running a subway system today, while adding all the maintenance costs over time, it might be the case that the cost of building the same thing from scratch would be cheaper, but unfortunately without the benefit of having passengers enjoy it (and pay for it) for over 100 years (thus partially subsidizing the maintenance costs).
So you could even consider something as rigid as a subway system built in an "agile" way, with a quick and literally dirty MVP out of the way early, and additional non-functional requirements added over the course of decades. It's just that those requirements weren't known or wanted initially.
Now would it be ok to do the same now? Have a subway system in a city that needs it, but without bathrooms in stations, with no pollution requirements initially, not accessible to the disabled, (name your other requirements not necessary for a MVP), but with the benefit that at least it exists now, it can be subsidized by passengers that are willing to use it, so that over time those other requirements are met. Better have them later than never.
We have some prior work on building a peer-to-peer wiki and dealing with the issues above: http://onlinelibrary.wiley.com/doi/10.1002/cpe.3420/abstract
In class we go over the answers to the quiz. I don't post the answers (the TA will have provided them the feedback they need when grading); rather we make it an interactive session. I answer questions the students have, we go over examples, I supplement the reading with slides if need be. Effectively, a flipped classroom.
This was done more out of necessity: first time teaching the course, no proper textbook (and in a quickly changing tech landscape for the topic at hand), lack of confidence in my own understanding of the material (I also tried gathering student questions beforehand so I could investigate them offline and come to class prepared to answer them), but now I think I'm going to stick to this way of teaching this course in the next installment next year.