Testing. I'm a very experienced programmer, and I have written plenty of unit tests -- but I've never worked in a place with a good testing culture and I've always struggled to develop a high level mentality of how and why I should be testing my software. When should I write a test for something and what is the best way to go about it? Does my code have to be more 'test friendly'? TDD seems very appealing to me as a way to outline my software before I 'dive in' but its hard for me to rationalize spending the extra time on building out the testing framework.
Every asynchronous programming API ever created.<p>My program spawns and runs in the main thread. It calls the main function. If it want it to run forever, I'll stick a while(1) loop in that function.<p>Now I want to have a particular thing go off and do some work in parallel with that main loop, and when it's done, I want the next iteration of the main loop to pick up on that fact.<p>Not once have I encountered a sane API for that use-case as easily expressed as those sentences of prose above.
I have a few (mostly silly ones):<p>• Async/await in C# (I have a pretty good mental model and use it quite often but honestly have never truly understood how it compares to c/C++ threads)<p>• async concepts in Java Android. Runnable, future, asynctask, threads arrghhhh. My head hurts.<p>• multitable SQL joins (inner vs outer). Someone gave a pretty good explanation in the comments.<p>• why do I need to use nginx for my web server? And what is a reverse proxy anyways?<p>• how come I can use any smpt client or something like mailchimp or sendgrid to send an email and specify any email in the "from" field. Can't I pose as someone I'm not?
Lisp continuations! From the name I swear they're just backing up the current scoped state and returning to it, but I've yet to find an example that clearly shows what's going on in what order. To be fair I haven't actually used lisp, just read through the beginnings of the scheme spec.
More 'ops' than 'programming', but: Email.<p>Email is a real 'devil in the details' thing. Anyone can follow a web how-to (when they're not stale) and set up a basic server, but it's crazy complex to understand properly. It's also weirdly both old-as-rocks and at the same time constantly changing (eg: deliverability scores, major vendors changing how they accept things, etc). Aliasing and mail flow and MUAs vs MTAs and mailbox formats and multiple arcane config files and blacklisting and DKIM and MX records (and TXT records) and etc etc etc... and if you're really crazy, GPG-signing. I've always got enough to just scrape by, but never actually comfortably grokked it all at any point. So many disparate spinning plates...
I'll risk looking like an idiot: Figuring out the architecture and different combinations of languages in modern web dev, and what a good solution choice is for a given need/problem.<p>From the basic options to set up a server, code deployment and maintenance using Github, nodejs and similar JS-everything, XML/JSON, how much of what should CSS take care of, DB access (and which one), structure of a modern webpage, CDNs, structure scaling, and requirements for browsers and platforms..<p>I used to use JS to change some text in html pages ftp'd to a server running a basic apache. Looking at it now is a big slap in the face. Nodeschool helps a bit, but it's all pretty blurred still. The more I dig, the deeper it gets without a sense of direction.
I just figured this out today but the pass by reference and pass by value thing in Python. I understood that Python variables in the same scope can refer to the same memory object, just the name is different. However when you pass the into classes and fuctions, mutable types are pass by reference and imutable types are pass by value. I just came to this realization after spending hours looking at gui code trying to figure out why some variables form a parent object we're not changing when passed into another class and modified.
C++ pointer/reference syntax.<p>I understand the concepts, and pointers make perfect sense to me when I'm programming in assembly, but whenever I look at them in C++ it's like & and * mean the opposite things when used in variable declarations from what they mean when used as an operator and yet another thing when used to declare arguments. But I've never seen anyone else acknowledge that they're weird so I feel like there's some sort of logical connection I'm missing.
This probably is ignorant, But I don't get why we need interface in java/c#. Why can't a base class with abstract methods be sufficient for that use case?
I guess this isn't "simple" but I'm in a place now where I'm responsible for "all-the-things" and I'm having a difficult time understanding what makes a good architecture for a web app.
call/cc. I understand what it is and what it does, but I don't understand how it's actually used in a practical way (all I've ever seen are synthetic/too abstract examples).
Initial setup to get started with programming and run a hello world kind of thing.<p>With things we do outside of an IDE.<p>Language specific functions and behaviour.