Right now, there is a language barrier between the developers and myself because I don't know the jargon. I say something and they think its something else, I try explaining how it should work, they fix it and it's not fixed.
It's inefficient and I feel ignorant for not being educated/able to efficient communicate. Can you make any recommendations of courses or where I should start?
I think starting with computer science (anatomy of a computer, history of computing, etc) and then moving into Java is probably the way to go.
However, from your description it sounds like you're struggling to communicate about what the programmers should be building, rather than how it's being built. If that's the case, learning to program will likely not fix your problem, and will instead waste time that you could have spent on higher-leverage activities. I'd recommend the following:
1) Focus on learning only those technical details that are relevant to your app. For Thea (from your profile), you would want to spend some time understanding encryption, multi-factor auth, the basics of cloud hosting and storage (their respective Wikipedia pages would be a good starting point). You don't need to know enough to build it, but you should be able to talk intelligently about each of these aspects of the system.
2) Don't expect to successfully convey your design requirements in a single conversation turn. It doesn't matter how good of a communicator you are, if there isn't back-and-forth between you and the developers, they did not understand it. If they're not asking questions, have them diagram what they understood as they explain it back to you.
3) Stop your developers if they start using jargon and ask them to explain it. Just as you expect them to ask questions, they should expect you to ask questions. This way, you'll learn only the jargon that is relevant to your business requirements, rather than spending time learning stuff that will never come up in the context of your app.
Maybe try looking at the curriculum for product management courses first? I think they might give you quicker, more effective benefit than trying to build up knowledge of computers (especially from such a fundamental level). You'll spend a lot of time learning things that, while beneficial eventually probably, won't help you right now.
https://www.edx.org/course/cs50s-computer-science-for-busine...
This isn't necessarily in the skill set of every engineer, but in a well rounded team, there should be maybe a couple of engineers who are recognized for being able to do this. From time to time, the question has arisen on HN, as to what a "senior" engineer consists of, and the ability to interface with a larger community (e.g., managers, marketeers, users, etc.) is often mentioned.
You might not be able to solve that problem right away, but it could figure into your future hiring practices.
A mistake/mis-step clients commonly make is trying to use the correct terminology/jargon which doesn't mean what they think it means, but the developer(s) think you know what you're on about so take you at face value.
Something common I've found is clients insisting on me using the latest buzzword technology even when it's not what they need.
And I'm not saying that's what you're doing, but trust your developers to do what you've hired them to do.
It's not a sign of being ignorant, everyone has different strengths, but you don't need to learn the entire trade just to communicate effectively.
[1] Of course, there are exceptions. but you would not be asking here if you worked with them. And you do quickly recognize the people that just nod and get sh*t done. They are rare, however.
I would recommend picking a programming language and doing the basic tutorials for it to start, all languages have them.
If you hit upon something you feel the tutorial isn't explaining well, open a new tab, google that specific thing, e.g. "what is a function" / "how does a function work" / "what is a function in python" / "how does a function work in python" until you get the results you want, and read different ones til you find an explanation that makes sense to you. If the tutorial you chose is consistently unclear to you, pick a different tutorial. Use a variety of resources.
Which language kind of depends what you're working on. Python is the lowest barrier-to-entry, probably, but for all I know you're working on an iOS app and maybe Swift would be a better starting point since it's more relevant to what you're doing. Avoid Perl, probably.
Once you've got a handle on the general basics of a programming language, solve some basic problems. Use google to find a list of basic 101 programming challenges that suits you. Solve them.
Once you've got a handle on basic programming, try building a simple app of whatever nature you like. The classic example is a TODO reminder/checklist app, but you can do whatever interests you. The goal should be to pick something that you definitely don't know how to build, thus forcing yourself to learn how. It will involve a lot of googling but you'll find yourself learning rapidly. You'll feel it.
Lastly, StackOverflow is your friend.
If you really want to learn programming, I recommend https://eloquentjavascript.net/ , this book is targeted at beginners but has enough rigor to give you a good base. JavaScript is also lingua-franca of web development. It is also a much simpler language than JavaScript with a smaller learning curve.
Java Programming I-II (https://java-programming.mooc.fi/),
Data Structures (https://fa20.datastructur.es/),
Software Construction (http://web.mit.edu/6.031/www/fa20/)
Remember that with coding you learn by doing, so resist the urge to "just watch videos" or even "watch videos and take notes". I recommend to my students to always have a side-project of some type. Pick something that will motivate you, such a game, or an application that you find interesting. Have that motivate you to learn the next thing, instead of just picking new topics and reading them one at a time. When we have limited free time as adults, learning new skills is all about maintaining that motivation and direction, so when self-teaching project work is probably the very best motivation and guide in lieu of an instructor.
Self-plug: I teach coding courses for beginners. My program (Kickstart Coding) combines video-based graded coursework with weekly live sessions and 1:1 tutoring, for a $299/month subscription. Learn more here: https://kickstartcoding.com/
You can start here https://www.khanacademy.org/computing/computer-programming/p...
I hope you find it useful! Let me know if there's any other help I can give you.
https://courses.edx.org/dashboard/programs/a4453798-ffc2-4f5...
I'm from a non-tech background and these two classes completely changed my world.
In general, I do also echo some of the other comments. If you are helping to design the app, you shouldn't necessarily need to understand the implementation details. In my experience, clients, whether they be external or internal or colleagues, getting too involved into what they think the implementation should be is usually a disaster. It puts pressure on the system to conform to how they think it should be, which is usually not necessarily how it should be, and it basically adds unnecessary constraints. The real constraints should be what the software should do and specifications on that, including how the software is intended to be maintained and extended.
Some thoughts on some specific courses and books that I think would be helpful to better understand the goals of software development and design and ways to think about it all:
Programming for Everyone - An Introduction to Visual Programming Languages: https://www.edx.org/course/programming-for-everyone-an-intro...
I think this course should be taken by managers, designers, and even software engineers. The primary result is that you'll come out of it knowing state charts, which are an extension to state machines, and this will be very useful for thinking about software and organizing what the software should do. Handling state is one of the primary problems in software, and you might notice that all of the various paradigms (OOP, functional, imperative, actors, etc.) in computer programming relate to the various ways people think about handling state in a computing system.
How to Code: Simple Data and Complex Data:
https://www.edx.org/course/how-to-code-simple-data
https://www.edx.org/course/how-to-code-complex-data
https://www.edx.org/micromasters/ubcx-software-development
These courses are taught by a designer of the Common Lisp language and based upon the excellent book How to Design Programs. It is essentially a language agnostic course that uses Racket to build up design paradigms that teaches you how to sort out your domain problem and designs into data and functions that operate on that data. The courses are part of a MicroMasters program, so if you really want to get into Java, that is taught in the follow-on courses.
Based upon your last comment, here are some book suggestions on how computers work:
Code: The Hidden Language of Computer Hardware and Software: https://www.amazon.com/Code-Language-Computer-Hardware-Softw...
The Pattern On The Stone: The Simple Ideas That Make Computers Work: https://www.amazon.com/Pattern-Stone-Computers-Science-Maste...
But How Do It Know? - The Basic Principles of Computers for Everyone: https://www.amazon.com/But-How-Know-Principles-Computers/dp/...
The Elements of Computing Systems: Building a Modern Computer from First Principles: https://www.amazon.com/Elements-Computing-Systems-Building-P...