I agree with u/mrexodia that Confluence just sucks. Primary knowledge base for my company for a decade and it's always been an unwieldy mess - slow, can't find what you need. Like JIRA I think it requires strong organization and top down enforcement or it quickly becomes a mess.
I think issues with documentation lay in two primary dimensions: people/processes and platform/software. There is a lot of software out there, I think I wanted to migrate our documentation and SOPs to Notion at some point but the process and people problems proved to be the more challenging of the two.
Please don’t buy anything from this person. Anything they teach, you can learn for free from better resources. They want to scam you off your money under the guise of “I love teaching and sharing knowledge with people”. They’re using a fake account now because their old one was banned in many subreddits for spamming their “amazing” offers.
P.S. This course has a lecture on git. Alternatively, read this comprehensive and not at all difficult to read documentation book.
Confluence is one of the worst things ever created. It’s nice for documenting research and it has JIRA “integration” and some “social” features (tagging people, comments, likes), but it’s impossible to find things especially if you don’t make good use of the spaces. It’s also extremely slow (like JIRA).
In my mind documentation software should be as fast as Everything and actually find relevant things and allow you to filter/learn to rank based on what’s filtered out.
My personal go-to list would be Thinking Forth, The Pragmatic Programmer, The Practice Of Programming, maybe On Lisp, Design Patterns Head First, Clean Code, in that order. The problem with designing large scale systems is that every book has its own one-and-only-practice and shuns all the others. Try to read a bit of everything and find a middle way. Thinking Forth, for example, has its focus on re-using ideas, not implementation. PragProg is more balanced, but still feels a little off. DesignPatterns and CleanCode have a big focus on OOP, On Lisp is heavily FP... no size fits all. Ref The Mythical Man-Month.
I'm just a CS student who just got done with my first internship, so I don't have a lot of experience. I'll give my 2 cents on the first question.
Working on other peoples software with no automated testing of any kind is like navigating a mine field.
I realized I must be in some sort of minority in really caring about writing small functions. It was the book "Clean Code" that got me to care about this. However, even when I was completely new to programming it wasn't long before I knew not to write 500-1000 line functions...
I dated an astronomer once upon a time, and I remember her software development and her stories from the software in her field. It doesn't look much like the software development talked about here.
The big requirement is that you can automate your mathematical operations. If you can't do that, move along. It's very easy to separate the developers from the non-developers in an interview. Project Euler is a fair sanity check there. Don't be discouraged if you can't just blow through them because some are legitimately difficult, but they should be within reach of someone who has both in-depth mathematical knowledge and development aptitude.
"Software infrastructure" is really damn vague. That could range from DevOps type stuff like Puppet/Chef to continuous integration stuff like Jenkins to fairly simple shell scripting sprinkled with a side of OS power user knowledge. If you're a halfway decent programmer, you can learn respectable Bash scripting in a week, though, and you can learn buzzwordy interview things about DevOps trends on the side. You can fake this one.
Running a calibration script means you can be trained to understand their software. Unless you know what they want you to calibrate, this is requirements padding.
I think LISP is a beautiful, underrated language, and there are seventy-five scientists using it for every industry developer, but it's falling way out of favor. Unless you know that you need LISP, don't bother. If you do know, expect everyone in the room to have read Structure and Interpretation of Computer Programs. If you like video lectures, I highly recommend Brian Harvey's lectures on the subject if you want a companion to (or replacement for) the book.
There are at least two frameworks in any language you'd even consider doing this in that'll automate real TLS handling. https://letsencrypt.org/ will make your certificate for free. All that's left is adding a line to whatever automation handles your server setup. Doing it right is so much easier and safer than doing it dumb. Do it right.
Well... The original Markdown software by John Gruber was released under a BSD license: https://daringfireball.net/projects/markdown/license
...but Markdown is also a syntax that's been adopted far and wide (with a few variations across implementations). That syntax has a ton of vendors and open source implementations that essentially guarantee that there will always be a way to get your markdown rendered to something pretty.
Just take a look at telegram export should be able to export all messages and images from a Telegram channel. Not sure what other platform you are wanting to port the messages into, but that part might be harder depending on whether you need to maintain the timestamps and other data.
You are looking to do a customer facing wiki? Wikipedia's software is a good bet:
I have had good experiences with DokuWiki, but definitely not as well trafficked as MediaWiki:
You'll need to host your own server to run this software.
> Also, triple your time estimates. Trust me, it will still take more time than you estimated, but not that much.
CloudFlare is big enough, but it's in beta so I wouldn't build anything on it yet that I need to not change.
Should be good for a JAMstack architecture.
But I agree that I'd prefer to use a host that could also serve my backend.
Never used either of them much myself... I've had a few people at work recommend investigating Facebook Origami https://facebook.github.io/origami/
I think that Invision also provide a limited free version https://www.invisionapp.com/m/
You basically want to look into "rapid prototyping tools"
Ah, okay. I guess I'm only paying for one email address at the moment.
Yeah I'm seeing that here: https://workspace.google.com/pricing.html
What I'm also seeing is that you can have "group aliases" which don't cost extra. The examples are "sales@yourcompany" and "support@yourcompany". Maybe this will work for OP?
Several of the above are addressed with ddd, particularly the ones about scalable event driven architectures and avoiding distributed monoliths. I recommend "the blue book" and "the red book" as they have become known.
https://www.amazon.com/dp/0321125215/ref=cm_sw_r_cp_apa_glt_fabc_JMVA48M1CH6G6812G5KM
https://www.amazon.com/dp/0321834577/ref=cm_sw_r_cp_apa_glt_fabc_H6CWR6VZ051ZD4S949V0
If you haven't already looked into it, I suggest reading up on cqrs. It compliments event driven architectures well and has some useful lessons for you, by the sound of the difficulties you're running into.
Reading and working in other people's code in a deep, non cursory way, has taught me a lot. Both what to embrace and what to reject.
Programming in LISP (for me of the Emacs or Sawfish/Rep flavor) shakes cobwebs loose and opens up new ways of thinking of code structures in Python.
Learning and applying Python metaprogramming has also opened up new vistas.
The latest Python Cookbook covering Python3 got some juices flowing. If only to make me want to ditch Python2 in as many projects as I can.
This. Find a project that interests you. I bet there is something out there related to your area of expertise that you havent run across yet. Find something like that and then start using it a bit first and then contribute the fixes or changes that you'd like to see.
Also, don't get discouraged. Remember that any software engineer you work with likely has done this for far longer and far more frequently than what you've had the need to do programming for.
And then finally, writing maintainable production ready code is a different beast entirely from writing smaller programs for just yourself that you dont intend to necessarily share with the world. The books "Code Complete" and "The Pragmatic Programmer" are good starting points for insight into that world if youre interested in heading in that direction.
A few questions come to mind:
1 - why are you changing the API and the code that calls the API? What is the reason the API must change?
2 - You say you can't get the architecture perfect, why do you say this? What's keeping this from happening?
3 - Have you considered writing a test and then writing the code to make that test pass?
A few resources -
Clean Code https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
Solid Principles - https://en.m.wikipedia.org/wiki/SOLID_(object-oriented_design) depending on how strict you want to be
Like 15 years ago, I would have said read everything Steve McConnell has written - Code Complete, Rapid Development, etc. Nowadays you are going to be leading a modern methodology, so understand your Agile/XP/Scrum/DevOps/Whatever very well - books on that subject are a great idea, though there is nothing wrong with the classics. /u/Buckwheat469 has some great suggestions too, especially around teambuilding. Lunches get harder as teams get bigger, for larger teams see if there's a little room in the budget to bring in lunch once a week or even once a month.
Believe in yourself and it will be a bit easier. There will be ups and downs, and you need to be able to steer your people through the downs, by showing them your vision for the path to the next upswing. Your job is not to share all your doubts with the team, and don't take a leadership job if you don't believe in what you're doing (IMO). You can do a lot of damage that way, to the company, to the project, and to the careers of your people, if you are just down and disillusioned. You need that sort of "whatever happens, we're the team that's going to find a way to deal with it" attitude to keep from being knocked around too much.
Good luck, you got this!
One book I recommend is Non Violent Communication. It has some practical advice that might help.
Common behaviour I've seen is the use of the word "you" in language. Focus on the work product rather than the person when reviewing. Rather than "I don't like what you've done here" say "I'm finding this code hard to read"
In discussions, focus on interests rather than positions (another book to read might be Getting to Yes).
Ever feel like you're having an argument? Try intentionally not talking the next time your having a conversation. Just ask questions. Let the other person speak.
My biggest advice: change takes time. Don't rush it. You've already taken a huge step by realising you need to improve this. Pick one thing you want to work on at a time.
Lastly, ask for feedback from your peers. Be transparent about this. Tell them you realise you can improve in this area and you want their help. This will also help them be more forgiving of your behaviour because they know you're trying to improve.
Code Complete - It's massive but it contains a lot of things you can implement instantly and explains why you should do them. It may look like one of those bible that sits on the shelf and no one ever reads but it's not.
The Pragmatic Programmer - Very concise book with a lot of good ideas however some aren't so relevant these days as things have moved in different directions
Software Testing (Ron Patton) - A book I found in the library when looking for sources on software testing for a paper. Unfortunately most resources on testing are god awful and horribly out of date, this is the only book I've found on the subject which is usable.
I would recommend Uncle Bob (Robert Martin) as well. Clean Code is an excellent read for a college student. I equate it to learning how to write a novel when all you've been taught is to write essays in college.
I highly recommend Steve McConnell's Code Complete. Yes, it's over 10 years old: doesn't matter. Excellent and practical advice for someone starting out.
I also recommend The Pragmatic Programmer. When this book came out I bought a copy for everyone on my team. It is awesome, and has survived the test of time.
Goetz's Java Concurrency in Practice is worth reading if you're interested in writing concurrent code and want to do it right.
To widen your views, try The Joy of Clojure by Fogus and Houser.
Academic books are always interesting to read, but few would be considered light reading. If there are particular areas of computer science that interest you, it's best to ask for recommendations there. Each person is different and what might work for them may be uninteresting to you. Personally I really like automata, so Automata Theory, Languages, and Computation by Hopcroft, Motwani, and Ullman is a personal favorite. And beware of someone telling you to by Knuth's The Art of Computer Programming and to read it cover to cover. Great books but are definitely not light reading.
I've found Code: The Hidden Language of Computer Hardware and Software by Charles Petzold helpful. It's not super technical but it gives really great examples to help wrap your head around a wide range of topics in computer science.
Other than that I'd strongly suggest looking at a top tier university for course listings and searching for courses you find interesting. Then search the universities website for the professor(s) who teach those courses and see if their individual website has recommended reading or even a syllabus that gives required and recommended books for the course. A lot of time you can even use the syllabus to help guide you through the book.
For me, I'm very interested in Data Science and I stumbled on a Professor Jeff Leeks by researching various courses available at Johns Hopkins University. His website doesn't have a lot of books but does link to a lot of great journal articles, papers, and github repositories that have been extremely helpful.
Code Complete: A Practical Handbook of Software Construction by Steve McConnell. Interview questions boil down to accessing raw intelligence and an attitude compatible with your prospective employer. Don't bother faking attitude it will just make you unhappy down the road. You're finishing CS that means you've got enough raw intelligence. But the 'tricky' interview questions I've seen (from the HR perspective) are being able to boil down an poorly state problem into a 'back-of-the-envelope' calculation. They want to know if you're worldly and have good intuition.
I don't know, what do you feel hungry to learn? Are you just anxious about what it's like to work vs school? I will say that you can (and should, and will probably) read books forever; I'm old, have a graduate degree, know several languages, and there's just no end. Learn, play with what you're curious about, and you can only really learn about software development by doing it.
Almost off topic, an addition to neuralrxn's rec. 'Code Complete' (which I haven't read but I know is pretty well-spoken of) might be The Pragmatic Programmer, about /practical/ (duh) programming, code-scale and a little bit above, things to be aware of. It's from 2000 and will overlap, probably, with the others you've read but, it's certainly good advice, and on amazon it's $20, and is probably in your local library as well. It's probably the equivalent of a couple months of good blog reading :).
A very relevant book here would be Programmer’s Brain
It gets into the why of why some are efficient in reading code while others are not.
I support government contracts, and need to submit hours each day, and it has to be accurate. So our time reporting app notifies us when we miss a day.
I end up turning Timesheet (Android) on at the start of the day, then when I stop it I put in the time.
It's kind of annoying, but if I didn't do it each day I know I'd be less accurate. Plus being over hours either means the manager has to explicitly approve going over, or I take time off. I'm sure not going to break the law by under reporting to meet company goals.
I'm not sure if it would help with the lack-of-resources issue, but you can use a Context to connect Compose to a remote host:
https://www.docker.com/blog/how-to-deploy-on-remote-docker-hosts-with-docker-compose/
There are so many reasons why software development projects fail I love this write up on why its so hard to estimate a software project.
I work for a web application development company. Here are some of the top reasons that I see our client's projects fail. http://www.panopticdev.com/blog/8-reasons-projects-fail/
Speedtest already provides a CLI, I'd recommend using that since it's less likely to be compromised. It's also actually already in Ubuntu official repos:
sudo apt-get install speedtest-cli
This question is super confusing to me, and your comments also bring to light some really weird constraints. If all you need to do is establish if there's internet, why not just ping? What is the context of the application? Are you trying to run a speed test? Why do you need to run a speed test 400+ times a day? Why do you need to host the file yourself? Why can't you just use an existing API like speedtest-cli?
Regardless, if you need to run a speedtest every few minutes and there's also all these strange constraints, then why not just spin up a super minimal VPS to serve the file? Then you can have complete control over everything. DigitalOcean has options that would more than fit your needs for $5 a month. You could also just use a service like GCP or AWS to host some specific file directly and pull those down.
Sometimes I find course material extremely boring if I can't think of a project that it can be applied to. If that's the situation you're in then maybe you need to come up with something you want to build using react. Also instead of using the Udemy course, why not use the actual react tutorial as it's quite hands on and the pacing is com https://reactjs.org/tutorial/tutorial.html.
Also /r/reactjs occasionally has tips and people posting up their own projects.
If you follow this book you might be able to make a toy app within 100-200 hours.
If you follow this course doing only the most applicable sections it will probably take you 300-600 hours.
After that you would have to apply that knowledge to make the app you want (which isn't that different). I would say you you need another few hundred hours in before it starts to look like what you're imagining.
VS Code has a remote environments feature meant to do exactly this. All you would need is a VPN or port forwarding. Works best with Linux and/or Docker environments but can be set up to work with others too.
generally you don't want one developer to own a particular bit as that means nothing can be fixed while they are out and can make it hard to solve some bugs when the symptoms appear in one area but error is in some one else's code. It also brings in egos as developers start seeing the code as theirs and that can make team work hard.
The way it usually works is you use a code repository such as git and generally avoid working in same area at same time as much as possible. Normally there will be a team leader in charge to co-ordinate but experienced teams can self manage
> First of all the IDE is not in my computer, we connect to a remote virtual machine.
Just curious–why? Can't you clone the repo to your local machine and develop there? What's stopping you from setting up your own IDE, say, VSCode or whatever?
> Every time I switch branch it takes a lot to reload.
If you're switching branches often enough, it becomes worthwhile to use git worktrees (I assume you use git for source control). The idea is that you create a worktree per branch so that the branch is always in a checked-out state and the separate branch builds are kept in a warm state. This way switching to a new branch just means opening its directory in the IDE, and everything is ready to go. Worktrees specifically have the benefit over clones that, their files are linked as much as possible so they don't take much extra disk space.
As others have said, delivering incomplete APK can be good to prove tangible progress. However, partial functionality delivered out-of-context can scare a client: They may see something half working and mistakenly thing 'this is what I'm getting'. Because of this; I'd strongly suggest a walk & talk through any partial functionality immediately prior to delivering any new APK.
To do this removely, use the Vyzor Desktop / Android App to project the device screen onto your desktop, then share that window on a Zoom call. Other screen sharing works of course just don't use Google Hangouts, it has the absolute worst screen sharing quality. With the clients consent you can also record the session to capture their feedback.
Do you mean something like repl.it? It seems like the compiler itself isn't the issue, depending on the language you're using. Just use GCC or rustc or whatever compiler you need for the language in question. Could you give some more information about what you're trying to build?
VScode has pretty good snippet support. Most of their plugins have snippets, and also the ability to create your own: https://code.visualstudio.com/docs/editor/userdefinedsnippets
I'm still kindof amazed I'm using a free Microsoft editor on my Mac day to day, but I've become a fan.
Yes context switching is a pain. I block my own calendar in advance for individual project work. I deliberately snooze my slack during most of these time blocks.
I related well to this blog.
If Trello is too complicated, couldnt you just track what you need on an excel spreadsheet
​
IMHO Jira (and Azure devops) are built the way they are because managing software projects isnt that easy and those tools have already covered limitations of the more simplistic software. But - You obviously know what you are looking for
there is also a great website https://alternativeto.net which links to many alternatives
I am not super familiar with Django but if you are working on an API your first milestone should be deciding on the data models that you will be providing.
If you have good data models the WebAPI should be straightforward. Do not over complicate the API because remember that its purpose is to simply facilitate CRUD operations.
I would assume that Django should have the concept of scaffolded endpoints. This means that it should be able to auto generate your endpoints simply by running a command against the data models you are using. This generally assumes that you are using an ORM. You can almost get away with doing 0 manual lines of code in most Ruby on Rails type frameworks.
Edit: After some initial searching Django does not offer any sort of scaffolding....which seems strange. This link explains scaffolding as it pertains to ruby and user interface end points http://www.tutorialspoint.com/ruby-on-rails/rails-scaffolding.htm. But you can see that if you were to simply rework some of this code it could be used for WebAPI endpoints.
Both Angular and React support some kind of SSR now: https://angular.io/guide/universal. I haven't tried it myself, and you're right... Usually SPAs and SEO-sensitive apps don't overlap IMHO. I still like using Wordpress or similar for public-facing sites because it has better content management tools, but e-commerce is a grey area.
By the way Angular wasn't born from React.js. they came out about roughly the same time. React came out a little bit after, using the Shadow DOM which I'm not sure was available when angular was written
The later for tracking requests, it's a chat program that allows turning chat messages into tasks. Since we are a small shop that is what we use 90% of the time. Requirements will come in through the tasks and when deployed we just check them of.
Zenkit integrates and allows managing these tasks and move them along the different states (testing, UAT, production for example) but as I said we found it sufficient to just use chat.
Sounds like you are looking for an ERP. This is one of the most commons kinds of software and is a catch-all term for what basically every company runs on. In 2020 there is almost no reason to develop one from scratch unless you want to cause yourself a ton of headaches.
https://en.wikipedia.org/wiki/Enterprise_resource_planning
I don't know much about which are most popular for small business, but a quick Google search tells me a lot of people suggest this one:
As previously suggested, a whiteboard might be a great option. Hopefully you can get one medium to large, and at least 4 markers (black, blue, red, green) - I prefer those erasers with magnets that can hold at least two markers, it's pretty convenient.
The main issue of this approach is portability. So if possible get an iPad mini with pencil and the Concepts App.
Really depends on what you need to write the docs for and who writes the docs. Basically you could go with some kind of static site generator that takes Markdown as a document source. This is more manual work, but you're usuallly also more flexible that way.
VuePress, Docusaurus, Slate and others come to mind.
If you are looking for something that can easily be used by non-technical folks as well BookStack is worth a shot.
All options named are free and open-source. But if you do decide to use the software for your company I highly advise you to donate money to the developers. Disclaimer: I use BookStack both professionally and for personal projects and my experience has been great.
This is nice! Looks good, works according to my quick test. And simpler than Zoom once you have a link to join.
I was attempted to compare this to BigBlueButton but they are in their own class and not really competing with each other.
Depends on which databases you need to learn.
If you needed to learn, for instance MySQL, I would google 'best MySQL courses reddit', and pick an introductory course from the research that pops up there.
Here is a list of databases most commonly used from a quick google search of 'most common databases used today'.
I would recommend using ZebraPlan. This is the only agile software I have used that has the built-in capabilities to review code, track the progress of outsourcing teams, and analyze team performance. Much more flexible and easier to use than Jira in my opinion. You can also integrate with GitHub or Subversion. Check them out here: https://www.zebraplan.com
Check this assessment software: https://www.hackerearth.com/recruit/?utm_medium=post&utm_source=LinkedIn&utm_campaign=SocialMedia
Why do you need a fully functioning app to present at a conference? If you've got a user interface designed already, you can make a pretty "functioning" prototype using the Marvel App: https://marvelapp.com/.
Since you're RESTful, you could use Swagger to define the APIs, then just generate all the client code (assuming there's a client/codegen for your particular stack). 100% consistent, and eliminates a bunch of book-keeping maintenance.
If your documentation is too complex to fit in the README, then I would incorporate documentation generation tools like sphinx
and include instructions for building the docs and hosting them online somewhere like https://readthedocs.org/
We use this https://miro.com.
You can see what other people are looking at (you can see their mouse pointer). The canvas is massive. Has a free tier. Integrates with JIRA (paid feature).
Not sure of any downsides yet, still early days, also not sure how it stacks up against Jamboard, and others.
(Edit - added pros)
Assuming you're on a Windows machine, install something like WAMP http://www.wampserver.com/en/ and install Joomla & Wordpress. Those are the two most heavily used CMSs, and you should get a bit of perspective on how two different systems do things.
You could install Drupal too, but there's much more of a learning curve that'll chew up most of those few days.
I think flutter is interesting since you can basically write it once and deploy to web and mobile, but since you’re a new dev it’s probably more important to get at least one language under your belt so give nodejs a shot. You have plenty of options for front end or back end frameworks. I’d suggest giving the MERN stack a look (https://www.mongodb.com/mern-stack) or possibly meteor js since it’s an all in one sort of framework.
yeah, you can look into webrtc or find an api that handles a lot of the backend and stuff, Daily has some video conference tutorials on their site.
I use Restyaboard, a great free tool for organizing both personal and work life. This tool helps to manage tasks and projects, plan deadlines, create reports, track project plans, progress, workflows, and much more.
People need to leave their phones and computers on silent! Basic decency 🤷🏻♀️ I really recommend noise-canceling headphones. I use Bose and they're great. Now I just need to find a way to take work calls in the open office space without bothering my colleagues (no private office or meeting space yet...)
I'm of course biased towards the style embedded in the software we sell but leaving that aside here are some things that worked for me in the past:
If you want more on the Uclusion way you can contact me from the website.
With more than a decade in this industry and I haven't seen agile development used religiously. In fact it is one of those ideals that sound great in theory but rarely practiced completely. (Another such example is TDD).
Check out the book Shape Up from the Basecamp folks: https://basecamp.com/shapeup. I enjoyed reading that and it reflect some of the strategy that has worked for me.
It definitely won't be everyone's cup of tea, but I thought "A Discipline for Software Engineering" had some worthwhile things to say about improving software engineering skills using a highly empirical approach with an emphasis on measuring your own work to drive your self-improvement.
It's not focused solely on speed, but speed is an important dimension it discusses.
It seems that your comment contains 1 or more links that are hard to tap for mobile users. I will extend those so they're easier for our sausage fingers to click!
Here is link number 1 - Previous text "nmm"
^Please ^PM ^/u/eganwall ^with ^issues ^or ^feedback! ^| ^Delete
Exercises at the back of - A Discipline for Software Engineering - Watts S. Humphrey (Author)
​
the book could be better but the Exercises are like gold. https://www.amazon.com/Discipline-Software-Engineering-Watts-Humphrey/dp/0201546108
I understand the Exercises are public domain.
...
understanding the ROI of QA is key imho
Domain driven design, in a lot of ways, is about just this. Developing a ubiquitous language for use by the experts and the development team.
That said, you probably can’t push it alone. You need both “sides” to buy in.
One good snippet from Eric Evans Book:
One Team, One Language
Technical people often feel the need to "shield" the business experts from the domain model. They say:
"Too abstract for them" "They don't understand objects" "We ahve to collect requirements in their terminology"
These are just a few of the reasons I've heard for having two languages on the team. Forget them.
...
When domain experts use this LANGUAGE in discussions with developers or among themselves, they quickly discover areas where the model is inadequate for their needs or seems wrong to them. The domain experts (with the help of the developers) will also find areas where the precision of the model-based language exposes contradictions of vagueness in their thinking
This isn't going to seem very helpful but:
Basically vpns are pretty flawed by themselves, but still worth getting.
More helpfully perhaps, I'd think about IPVN or Cyberghost but not NordVPN.
I just bought this curved Samsung monitor for gaming. It's 27inches and I thought it looked cool and although not the top notch quality it still looks pretty good to me and for a decent price.
https://www.amazon.com/gp/product/B01CX26WIG/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1
If you're willing to pay for books, check out McConnell's Rapid Development: Taming Wild Software Schedules and Boehm and Turner's Balancing Agility and Discipline: A Guide for the Perplexed. Both really get into details of different methodologies. Rapid Development goes into 10 different life cycle models and their strengths and weaknesses. Balancing Agility and Discipline is at a higher level, but does contain an overview of a handful of different models and methods.
Personal opinion, but I gave this book: https://www.amazon.co.uk/Agile-Project-Management-Azure-DevOps/dp/1484244826/ref=sr_1_3?dchild=1&keywords=azure+devops&qid=1595590576&s=books&sr=1-3 to a friend, it's a practical book with a free SDLC tool created by Microsoft.
Some engineering team here in Amazon have a thing called "Clean Code Party" what we do is we get together and go through a few main section of clean code and mark them as "always do", "most of the time", "never" with examples where ever possible. We all agree to it as a team.
During code review, when we spot bad code, we would comment something like "function is too large, as discussed here <link>"
No clue about ios but this might help for android
https://play.google.com/store/apps/details?id=com.mendhak.gpslogger
It wouldn't take much to write a service to do basically the same thing. That being said, I'm a little skeptical as to how well this approach will work out. I would assume spinning up a board with gps and cellular modules would work better. Connect it to the OBD-II port and you have a wealth of info to play with.
I'd recommend reading this book: https://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052
Don't perpetuate the cycle! Make sure everything new that you write, and anything you modify, is tested and documented.
Rather than jumping in to the middle, search for whatever project management artifacts they have. Is there a Jira board, shared directory or similar which details what features have been requested and added over the years? This can be a good starting point to figuring out the codebase.
I've got Martin's Clean Code. I'm working my way through it. I will look more into SOLID.
I think I'm changing my API most often because I am putting more than one responsibility in a class (violating the first principle of SOLID, I guess). When I need a new feature that expands one of those responsibilities, I realize that the code for that responsibility doesn't belong and create a new class for it.
I appreciate the advice and resources.
Of my entire time at college and in my professional career there are only two books that I have found helpful in my career. Both are very dense and the two are about as different as they come.
1) Introduction to Languages and the Theory of Computation If you can get your head around this book you can figure out any problem put in front of you. It is super dense and will frequently leave you asking yourself "What the hell?!". I took two courses studying this book. This shit isn't for the faint of heart.
2) JavaScript: The Good Parts This book is also quite dense but in the opposite fashion. It is very hands on, meaning you can use almost everything in this book in code if you are coding in JavaScript. The link is to the free e-book that you can download a PDF of.
Happy Coding!
Few books I recommend you take a look at. I note a title as 'Mythical Man Month', which was a nice read!
'Software Engineering' 9th edition by Ian Sommerville, is a nice book about software engineering in general. It is heavy weight; probably an overkill in your scenario but I do recommend reading it! It gives you a base from which to explore.
A more light weight alternative would be applying an agile methodology.
The first part of "Agile & Iterative Development A Manager's Guide" gives a good indication of what Agile software development is about. It introduces 'Scrum' as a management framework and and 'eXtreme Programming (XP)'. XP is a light weight method! You can read more about it in 'Extreme Programming Explained' and 'Planning Extreme Programming'.
'The Pragmatic Programmer' is another good book about writing software and of the many little things which one should keep in mind.
'Code Complete' and 'Clean Code' are books about how to write maintainable code. They are full of good arguments which you can apply against those on your team who take pride in their code and get all upset when you suggest changes or improvements.
For peer reviewed articles, I would suggest a membership of IEEE Computer Society. If I remember correctly, it comes with a digital access to many of IEEE journals, such as the IEEE Software Magazine (might have to pay extra for access to journals, I don't remember!).
I know you're talking about Robert Martin's Clean Code series of books - I've read the first and I love it. It gets a bit too deep and complicated for a newb like me at times though, I'm barely into OOP and already he goes into depth about SOLID principles and TDD, which I think are a bit more than what I can handle at the moment.
At the same time however, even though having clean function and variable names, I often feel like while I'm trying to focus on a specific feature I am failing to see the bigger picture of the project.. or the other way around, where I see the bigger picture but don't know how to get the specifics right.
I often feel like I'm fighting with my code to get it to work.. or cross my fingers and hope that my next compile won't screw up.
I'd just like to get that point where I know both the high level and low level of my code, and just know that things are going to work -exactly- how I want it to, without having to hope or pray to some code deity that the next iteration of my code is going to work.
In this case I'd refer to The Mythical Man-Month: plan to throw one away. Or, as that page suggests, build quickly. Use prototyping and/or tracer bullets to create a feedback loop with the (people in the) problem domain, so you gain your insight quickly.
If you have no idea about your problem domain, what is your product supposed to look like and when is it done? Figuring out how to evaluate this would be the main priority. (to borrow from genetic programming: figure out what the evaluation function should look like. This is always the hardest part.)
http://developer.7digital.com/blog/technical-academy-tour the programme we ran was 3 months and designed to get you onboard as a full-time developer. It was tough but we supported the graduates throughout the process. At lot will depend on your employer. Try and get someone to be your mentor whilst you're there. Also read http://www.amazon.com/Apprenticeship-Patterns-Guidance-Aspiring-Craftsman/dp/0596518382 before you start
Of my entire time at college and in my professional career there are only two books that I have found helpful in my career. Both are very dense and the two are about as different as they come.
1) Introduction to Languages and the Theory of Computation If you can get your head around this book you can figure out any problem put in front of you. It is super dense and will frequently leave you asking yourself "What the hell?!". I took two courses studying this book. This shit isn't for the faint of heart.
2) JavaScript: The Good Parts This book is also quite dense but in the opposite fashion. It is very hands on, meaning you can use almost everything in this book in code if you are coding in JavaScript. The link is to the free e-book that you can download a PDF of.
Happy Coding!
I've read UX for Lean Startups: Faster, Smarter User Experience Research and Design, which I enjoyed. Do you know how it is compared to the two you mentioned?
Calling at the same time will not be possible with one SIM card.
Use the Twilio API for example to make the calls: https://www.twilio.com/docs/api/voice/making-calls
Do you want to call the numbers from your phone (app/website) or is the terminal on your PC enough? or do you want to automate it (e.g. call everybody when your phone gets unlocked)? - in that case you should use something like Tasker on Android