diff --git a/content/books/things-i-learnt/_index.md b/content/books/things-i-learnt/_index.md index 2a62fa5..dd43721 100644 --- a/content/books/things-i-learnt/_index.md +++ b/content/books/things-i-learnt/_index.md @@ -53,6 +53,7 @@ template = "section-contentless.html" * [Always Use UTF-8 For Your Strings](use-utf8) * [Optimization Is For Compilers](optimization) * [Units Makes Things Clear](units) + * [If It Doesn't Run On Your Computer, You Have A Problem](run-locally) * Making Things Go * [The Config File Is Friend](config-file) * [Command Line Options Are Weird, But Helpful](command-line-options) @@ -72,3 +73,8 @@ template = "section-contentless.html" * Personal * [Companies Look For Specialists But Keep Generalists Longer](specialists) * [Keep A List of Stupid Bugs That Took More Than 1 Hour To Solve](stupid-bugs-list) + * [When It's Time to Stop, It's Time To Stop](time-to-stop) + * [Code of Conduct Protect YOU, Not THEM](coc) + * [Learn To Say No](say-no) + * [Take Responsibility For The Use Of Your Code](responsible-code) + * [Don't Tell It's Done When It's Not](not-done) diff --git a/content/books/things-i-learnt/coc/index.md b/content/books/things-i-learnt/coc/index.md new file mode 100644 index 0000000..8701a4b --- /dev/null +++ b/content/books/things-i-learnt/coc/index.md @@ -0,0 +1,27 @@ ++++ +title = "Things I Learnt The Hard Way - Code of Conduct Protect YOU, Not THEM" +date = 2019-07-18 + +[taxonomies] +tags = ["en-au", "books", "things i learnt", "personal", "coc"] ++++ + +When you're beginning with any language/library/framework, check their CoC; +they will protect _you_ from being harassed for not immediately getting what +is going on instead of blocking you from telling them what you think. + + + +I'm mentioning this 'cause a lot of people complain about CoC, but they +forget that they allow them to join in any project without being called +"freaking noob" or "just go read the docs before annoying us". + +And don't be afraid to ask moderators if someone that seems be in the +community for longer than you isn't break the CoC. Just because you just got +into the community, it doesn't mean you can't be part of it or that someone +can abuse their position of "veteran" to not respect you. + +Also, remember that most people that are against CoCs are the ones that want +to be able to call names on everyone. + +{{ chapters(prev_chapter_link="/books/things-i-learnt/time-to-stop", prev_chapter_title="When It's Time to Stop, It's Time To Stop", next_chapter_link="/books/things-i-learnt/say-no", next_chapter_title="Learn To Say No") }} diff --git a/content/books/things-i-learnt/config-file/index.md b/content/books/things-i-learnt/config-file/index.md index f6884a8..5805823 100644 --- a/content/books/things-i-learnt/config-file/index.md +++ b/content/books/things-i-learnt/config-file/index.md @@ -52,4 +52,4 @@ you'll find that you're half-way through it. [^1]: In other words, they have a [time to live](https://en.wikipedia.org/wiki/Time_to_live). -{{ chapters(prev_chapter_link="/books/things-i-learnt/units", prev_chapter_title="Units Makes Things Clear", next_chapter_link="/books/things-i-learnt/command-line-options", next_chapter_title="Command Line Options Are Weird, But Helpful") }} +{{ chapters(prev_chapter_link="/books/things-i-learnt/run-locally", prev_chapter_title="If It Doesn't Run On Your Computer, You Have A Problem", next_chapter_link="/books/things-i-learnt/command-line-options", next_chapter_title="Command Line Options Are Weird, But Helpful") }} diff --git a/content/books/things-i-learnt/not-done/index.md b/content/books/things-i-learnt/not-done/index.md new file mode 100644 index 0000000..d0c062d --- /dev/null +++ b/content/books/things-i-learnt/not-done/index.md @@ -0,0 +1,33 @@ ++++ +title = "Things I Learnt The Hard Way - Don't Tell It's Done When It's Not" +date = 2019-07-18 + +[taxonomies] +tags = ["en-au", "books", "things i learnt", "personal", "responsibility"] ++++ + +You are tired of running the same thing over and over again. You kinda +remember that something weird may happen, but because you're tired, you tell +everyone that "It's finished". Don't. + + + +I must admit that I've done this. Yes, there is that corner case that I didn't +test. Yes, there is that piece of code that, although it works, it's weird. +Yes, I left a technical debt behind. But we get tired of looking at the same +thing over and over. And we get pushed by higher ups to deliver stuff. And +that's when we say "It's done", when it's not. + +Although we just dodged one, we end up leaving our colleagues -- people that +really depend on our work -- down. They expect to connect to whatever we are +doing to keep going. The expect to see the results of their work crystallized +by ours. And they can't. 'Cause we said "It's done" when it wasn't. + +And you can be sure, as soon as that happens, they will be the first to point, +in minutes, that it is not done. + +On the other hand, if you say "Almost, but there is this thing that bothers me +and I think it may give us a headache in the future", they will understand. So +be clear and transparent about your work. + +{{ chapters(prev_chapter_link="/books/things-i-learnt/responsible-code", prev_chapter_title="Take Responsibility For The Use Of Your Code") }} diff --git a/content/books/things-i-learnt/responsible-code/index.md b/content/books/things-i-learnt/responsible-code/index.md new file mode 100644 index 0000000..bbccbf9 --- /dev/null +++ b/content/books/things-i-learnt/responsible-code/index.md @@ -0,0 +1,48 @@ ++++ +title = "Things I Learnt The Hard Way - Take Responsibility For The Use Of Your Code" +date = 2019-07-18 + +[taxonomies] +tags = ["en-au", "books", "things i learnt", "personal", "responsibility"] ++++ + +This is hard. Very very hard. It's the difference between "freedom" and +"responsibility". + + + +There is nothing wrong in writing, for example, a software to capture people's +faces and detect their ethnicity, but you have to think about what that will +be used on. + +Even on an open source project, you can take responsibility without blocking +people. You can make your project harder for people trying to abuse to use it, +to the point they will have to take control of their own fork. + +One example is a small application called [Tusky](https://tusky.app/), which +is "An Android client for the microblogging server Mastodon", completely open +source. Mastodon is a network of microblogging servers with connect to each +other, kinda like Twitter, but you can pick a different server that is not +twitter.com and still get updates from that server. One of the servers that +appeared in the server list is an alt-right server which, as most alt-right +forums, promote a lot of hate. What Tusky did? When you try to add an account +on that server, instead of adding the account, [they play a video of Never +Gonna Give You Up](https://github.com/tuskyapp/Tusky/pull/1303), basically +[rickrolling](https://en.wikipedia.org/wiki/Rickrolling) anyone who, well, is +an alt-righter. + +Tusky broke the open source license? No, the code is still available. Anyone +wanting to use the server can pick the code, fork it, remove the rickroll and +release their own version of the application. But Tusky developers took an +instead of saying "We'll not take part in promoting hate speech" and one can't +deny that they did. + +It is a bit hard to do so on the company code -- you would get some reprimands +if you try to shame or block one of the company clients from using the company +application -- but you [can say no](/books/things-i-learnt/say-no) and, +depending on how offensive you think the use the code is, you can even start +looking for a new place to work. People on larger and "cooler" companies, like +Google, left their jobs because they didn't agree with what the company was +doing, and so can you. + +{{ chapters(prev_chapter_link="/books/things-i-learnt/say-no", prev_chapter_title="Learn To Say No", next_chapter_link="/books/things-i-learnt/not-done", next_chapter_title="Don't Tell It's Done When It's Not") }} diff --git a/content/books/things-i-learnt/run-locally/index.md b/content/books/things-i-learnt/run-locally/index.md new file mode 100644 index 0000000..9442b01 --- /dev/null +++ b/content/books/things-i-learnt/run-locally/index.md @@ -0,0 +1,42 @@ ++++ +title = "Things I Learnt The Hard Way - If It Doesn't Run On Your Computer, You Have A Problem" +date = 2019-07-18 + +[taxonomies] +tags = ["en-au", "books", "things i learnt", "local run", "cloud"] ++++ + +I've seen a lot of systems that would never run on a isolated computer, like +the developer tool, 'cause the system requires running on a specialized +environment. Those things are wrong. + + + +Requiring a specialized environment absolutely kills productivity. + +If your system will run on a specialized environment -- and I'm including "the +cloud" here -- look for something that can abstract whatever you're using. For +example, if you're using AWS SQS, which is a queue, look for a library that +can abstract the way a queue works so you can also run with RabbitMQ, which +can be easily run on your own computer. + +If you're using a very specialized thing, you may have to write the +abstraction yourself, isolating it from the main system, so you can develop +the main product in peace. + +One of the most productivity killer environment I worked require running the +project on a customized Apache installation, running the client specialized +framework. The whole problem is that the client refused to allow us to not use +it or install on our local machines (mostly 'cause the install of said +framework was really complex). In other for us to work and see things working, +we had to use a VPN to the client computers, develop things there and manually +forcing things to reload. No only we had absolutely nothing to do when the VPN +was down ('cause it require out company infrastructure working hand-in-hand +with the client infrastructure and the internet provider infrastructure, which +is absolutely impossible), the flow was really cumbersome. + +If we had the chance to not use it and run all the development and tests on +our own computers, I have the feeling we could deliver the product 2-3 months +earlier. + +{{ chapters(prev_chapter_link="/books/things-i-learnt/units", prev_chapter_title="Units Makes Things Clear", next_chapter_link="/books/things-i-learnt/config-file", next_chapter_title="The Config File Is Friend") }} diff --git a/content/books/things-i-learnt/say-no/index.md b/content/books/things-i-learnt/say-no/index.md new file mode 100644 index 0000000..614c55b --- /dev/null +++ b/content/books/things-i-learnt/say-no/index.md @@ -0,0 +1,27 @@ ++++ +title = "Things I Learnt The Hard Way - Learn To Say No" +date = 2019-07-18 + +[taxonomies] +tags = ["en-au", "books", "things i learnt", "personal", "say no"] ++++ + +Sometimes, you'll have to say no: No, I can't do it; no, it can't be made in +this time; no, I don't feel capable of doing this; no, I don't feel +comfortable writing this. + + + +Saying no doesn't mean you won't do it. Once I had to say to our CTO: "Ok, +I'll do it, but I want to note that I don't agree with what we are doing." In +the end, the app was barred exactly because the thing we were doing. + +Being explicit about what you don't feel is a good point may not be what some +higher ups are expecting. The fact that you don't approve but will do it +anyway may be something that can either show that your not simply a drone or, +unfortunately, label you as a "troublemaker". Honestly, if you feel it threw +you in the former, you should start looking for a new place to work. If you +said you won't be comfortable and still _did the work_, and they had to label +you something, then this place doesn't respect you as a person. + +{{ chapters(prev_chapter_link="/books/things-i-learnt/coc", prev_chapter_title="Code of Conduct Protect YOU, Not THEM", next_chapter_link="/books/things-i-learnt/responsible-code", next_chapter_title="Take Responsibility For The Use Of Your Code") }} diff --git a/content/books/things-i-learnt/stupid-bugs-list/index.md b/content/books/things-i-learnt/stupid-bugs-list/index.md index 754994f..c3f19ae 100644 --- a/content/books/things-i-learnt/stupid-bugs-list/index.md +++ b/content/books/things-i-learnt/stupid-bugs-list/index.md @@ -21,4 +21,4 @@ what went wrong. If I just had a list of stupid bugs that took me about 1 hour or more to solve, I wouldn't be stuck for another hour figuring out what went wrong. -{{ chapters(prev_chapter_link="/books/things-i-learnt/specialists", prev_chapter_title="Companies Look For Specialists But Keep Generalists Longer") }} +{{ chapters(prev_chapter_link="/books/things-i-learnt/specialists", prev_chapter_title="Companies Look For Specialists But Keep Generalists Longer", next_chapter_link="/books/things-i-learnt/time-to-stop", next_chapter_title="When It's Time to Stop, It's Time To Stop") }} diff --git a/content/books/things-i-learnt/time-to-stop/index.md b/content/books/things-i-learnt/time-to-stop/index.md new file mode 100644 index 0000000..32b46ec --- /dev/null +++ b/content/books/things-i-learnt/time-to-stop/index.md @@ -0,0 +1,25 @@ ++++ +title = "Things I Learnt The Hard Way - When It's Time to Stop, It's Time To Stop" +date = 2019-07-18 + +[taxonomies] +tags = ["en-au", "books", "things i learnt", "personal", "stop", "personal time"] ++++ + +Learn when you can't code anymore. + + + +Learn when you can't process things anymore. + +Don't push beyond that, it will just make things worse in the future. + +I tried to keep coding once when I had a migraine (not strong, but not mild). +Next day, when I was better, I had to rewrite most of the stuff I did, 'cause +it was all shit. + +Also, when you're not feeling fine, you won't be able to concentrate and your +productivity will plunge. It's a lot better to be a burden to society at your +own place than a burden to society at work. + +{{ chapters(prev_chapter_link="/books/things-i-learnt/stupid-bugs-list", prev_chapter_title="Keep A List of Stupid Bugs That Took More Than 1 Hour To Solve", next_chapter_link="/books/things-i-learnt/coc", next_chapter_title="Code of Conduct Protect YOU, Not THEM") }} diff --git a/content/books/things-i-learnt/units/index.md b/content/books/things-i-learnt/units/index.md index 9537884..d3225c9 100644 --- a/content/books/things-i-learnt/units/index.md +++ b/content/books/things-i-learnt/units/index.md @@ -26,4 +26,4 @@ That's why adding units to the function or parameters make sense. It removes the ambiguity of what it means and doesn't rely on some specialized IDE/Editor that display the parameter names. -{{ chapters(prev_chapter_link="/books/things-i-learnt/optimization", prev_chapter_title="Optimization Is For Compilers", next_chapter_link="/books/things-i-learnt/config-file", next_chapter_title="The Config File Is Friend") }} +{{ chapters(prev_chapter_link="/books/things-i-learnt/optimization", prev_chapter_title="Optimization Is For Compilers", next_chapter_link="/books/things-i-learnt/run-locally", next_chapter_title="If It Doesn't Run On Your Computer, You Have A Problem") }}