Doing things yourself is nice. The modern level of technology development provides unprecedented opportunities for home production - no longer need to manually cut, grind and planing. At your disposal a whole fleet of machine tools with numerical control: 3D printers, laser engravers, plazmorezy, turning and milling machines. The parts you create will be so good that you cannot distinguish them from the factory parts! It remains only to ... Design ! And here, I have to admit, you need to be a professional. Modern Systems of Automated Design are the quintessence of the achievements of science and technology and with the help of them you can create the most complex details and mechanisms. Usually, such programs are expensive, and you need to spend a lot of time on their development before you can use them easily and naturally. On the other hand, there are many different online tools for designing, including quite simple ones to master. With their help, it is easy to create geometrically simple objects, and if you want to do something more complicated, you need to be either a programmer or have enough patience and imagination to compose a complex form of your product from a limited set of primitives.
This article contains statements that are the opinion of the author, which may not coincide with anyone else's opinion. Some remarks may seem to the reader too radical and contradictory, others - pure philosophy, which has no practical significance, but still you should not take all this too close to heart;)
I believe that the statement "how to call a ship, so it will float" is true. Online tool for a wide audience of users must be minimalistic. As a good example of such minimalism, "Notepad" is an elementary program for viewing and editing text. This program provides only the basic functionality to perform tasks, nothing superfluous. Therefore, the name "NoteCAD" - sounds perfect for a new project.
Once I started programming in C ++. This language seemed to me beautiful, elegant and powerful. It seemed that with the help of it you can overcome any problem, move mountains. As a result, I have been using it for 15 years. But the former excitement and exaltation of its use have passed. I no longer defend him in arguments and no longer his supporter. I am now just an observer - calmly waiting for him to be overthrown, for I am sure his time will pass. C ++ is overly complex, unpredictable. You can never be sure that your program will work as you intended. You never know exactly how other data types behave inside, what copy constructors and assignment operators do. You are reinsured all the time, checking something on nullptr, all the time on guard. If you want to connect a third-party library, there are no two identical methods to solve this problem. Inventors will always come up with something new. A huge number of subsystems build, IDE, compilers, which sometimes require explicitly indicate that the character is a type using the directive typename ... Well, std? Yes, I'm just furious when I have to deal with the use of this monstrous, ugly, confusing and illogical library. No constant operator [] for std :: map? Really? In order to be able to add new items "beautifully" in the form of stdMap [key] = value?
What am I talking about? Yes, there are wonderful, modern programming languages! I will not give a complete list, I will only say that with all the ambiguous attitude of the public to Microsoft products, I recognize the C # language as fully fit. It is a modern, simple and logical language that deserves to be called C (pre) -diese, or C-4-plus (if the symbol "#" is divided into four parts). By the current moment, I have a little more than a year of programming practice on it, and all the typical tasks that I have encountered are really solved as per notes. I will be glad if you write in the comments what other languages ​​you consider to be the successors of C ++. If an overload of operators appeared in Java, you can also specify it, if not, then it is better not to. I am a developer of graphical and mathematical applications, the ability to overload mathematical operators for vectors is the basis of the universe for me. In fact, I believe that Java is an excellent language, and I felt incomparable ease and simplicity when I developed several applications for Java2 Micro Edition (if you know what I mean).
The choice of engine for development was not easy. The fact is that being a developer who was able to file his own engine , for this project I had to abandon it. It's not about desire or skill, it's about expediency. When you start to make the engine, you make the engine and only the engine, and there is no time left for anything else. It is important to skillfully allocate resources, especially if you want to bring your project to release.
In the market of three-dimensional engines there are a great many commercial and open source projects. But, frankly, in terms of simplicity and ease of development, there are practically no alternatives - there is only Unity. Despite the fact that this engine still contains many fundamental problems and strange limitations, it still won the hearts of millions of developers. Simplicity determined their choice, since starting development on this engine is easier than ever. The entity component system reflects the structure of reality better than the classical inheritance hierarchy, is convenient and flexible for both developers and content creators. The ability to build a project with one button for any popular platform, including mobile OS and even browsers, makes this engine the most attractive of all. But the decisive argument for choosing Unity for me is the ability to avoid JavaScript programming (but this is not completely). I am not against JavaScript, but ... In fact, I don’t want to know this language yet. I always avoided web technologies, website creation and javascript. No matter what you say, the possibilities of the brain are limited. At a certain point, new knowledge that you gain can fit in your head only at the cost of forgetting something old. In any case, well, when the problem can be solved with the tools that you already know. Development is faster and more efficient, even if the quality of the result is slightly lower (probably, pure JavaScript works faster than compiling C # into asm.js, but this is not certain).
In any case, a tool for developing a simple application should be simple. Unity satisfies all of these conditions. Of course, I doubted a little if I shouldn’t write everything in pure JavaScript, or maybe C ++ & Emscripten, but the overhead of learning new tools plus the need to develop the engine will not allow this project to survive. I'm going to make a tool that will actually be used, and the right development management will help to do this.
Any development is conducted under conditions of either a shortage of resources or minimization of costs. When you do a project alone, it seems to be absurd to apply development management. Take - and do! But it turns out that in such conditions it is easiest to get lost and go into the thicket of complex developments and algorithms that the project does not need at the moment. The project may not have "ikonochek" on healthy buttons, but the beautiful and finished interface will look weird without the implemented functionality of the application. It must be admitted that no matter how much free time you have, no matter how effective a programmer you are, all this is limited. I mean a comparison with hundreds of person-years invested in large CAD projects, such as SolidWorks or CATIA.
An important condition for the development of the project is self-control and a clear plan that must be followed. It is important to “beat your hands” in time, when it turns out that you suddenly started doing not what the project needs, but what you want at the moment. Nevertheless, the balance is important - your project, yours and that, in order to receive pleasure from it, therefore sometimes you can allow yourself some liberties. Deviation from the plan is possible only if we managed to do something priority faster than expected. For example, at the moment I want to program a project instead of writing this article, but I have to convince myself that the article is just as important a moment for a project as its functionality, since feedback provides the necessary data for moving in the right direction.
There is one more important point: you should avoid developing the functions of the program, which by development are far ahead of the average level of opportunities in the project. For example, if you make repairs in a new apartment, before you move into it, you first stick the wallpaper and put the linoleum before installing the furniture. If you do it the other way around, you have to move furniture many times before it finally takes its place. This requires a lot of extra effort, which is stupid and irrational. Approximately in the same way it happens with the "untimely" functionality, which not only takes time to develop, but also more and more binds you by the need to support it. Due to the fact that at the early stages of development, the architecture of the application has not yet been settled, architectural rebuilds all the time, speaking the language of repair, some parts of the wallpaper are glued together, and in some places instead of linoleum there is parquet, and there the plinth fell off)))) you are not strong in repair, I will translate into the language of the evolution of species: the fish will not be useful lungs for breathing on land, until the limbs are formed to move on it. Land reptiles can not appear from fish bypassing the amphibian stage. The development is the same evolution, therefore the program organs should be developed synchronously and in coordination. It is impossible to complete a part of a whole until the whole is completed.
In such circumstances, it is advisable to apply the approach of the project "spiral". First, each of the functions is developed in the lowest possible implementation, with a balanced degree of detail elaboration, and then, with subsequent development passes, each of the possibilities gradually improves. With this approach, the principle of a minimum viable product can be applied if, when choosing opportunities and the form of their realization, it is thought that the product is useful for solving real problems.
As users of NoteCAD, I see people who create various things with their own hands. This could be a 3d print, electronic device development, or even construction or repair.
As a contributor to SolveSpace , I have to prove that the code for a new project was created by me without using someone else's code. I decided to record a video with the process of creating controversial components, namely the geometric constraint solver . I do not know whether such a process can serve as an analogue of a clean room design , but I am sure that it removes most of the questions about the authorship of the code. These videos should not be considered as trainers, the purpose of their creation is proof, therefore they contain a boring development process of what it looks like from the outside. Of course, the most interesting things happen inside the head and, unfortunately, it was left behind the scenes.
When I was still thinking about starting the development of NoteCAD, I wanted the first use of the program for its intended purpose to take place as soon as possible. This article is a demonstration of the first use of the program, which has very limited functionality, but is already suitable for developing the simplest details. As the first application of the program, I drew a key chain - an animal from Escher’s famous Metamorphosis picture.
In the near future, we plan to enter into a full 3d space, the ability to create bodies of extrusion and rotation. The most difficult step in this stage will be the creation of a geometric kernel that supports Boolean operations . Thanks for attention!
Source: https://habr.com/ru/post/341816/
All Articles